Umístění přihlašovacích údajů databáze
Školení, která pořádám
Lidi se mě často ptají, kam je vhodné ukládat přihlašovací údaje pro přístup k databázi. Osobně mi nedělá potíže je uložit přímo do PHP kódu a pokud je server správně zabezpečený, neměl by se k nim nikdo dostat. Pokud mají být zdrojáky volně přístupné, je nutné buď soubor s přihlašovacími údaji ošetřovat odlišně nebo je nutné přihlašovací údaje uložit jinam.
Pro uložení přihlašovacích údajů se dají použít direktivy mysql.default_user a mysql.default_password vložené buď přímo do konfiguračního souboru Apache (takže tento soubor bude muset být běžným uživatelům nečitelný a změnu přihlašovacích údajů bude muset dělat administrátor) nebo do souboru z něj vloženého. Pokud případný restart Apache bude provádět root, může tento soubor patřit běžnému uživateli a pro všechny ostatní být nečitelný. To mi přijde jako nejlepší řešení.
Diskuse
U mysql.default_user a mysql.default_password je třeba dávat pozor, aby se ty údaje nedostaly na veřejnost např. pomocí phpinfo(). A všichni víme na kolika webech se takový volání bežně vyskytuje ;)
Trochu lép^Wjinak to má řešeno PDO, a to pomocí pdo.dsn.* aliasů. Jenže ty prý jdou zas nastavit jenom v php.ini.
Birkof:
A co třeba vytvořit adresář třeba CONFIG a do něj uložit soubor .htaccess s obsahem "deny from all". Tím dosáhnete toho, že budete mít adresář do kterého se z venku nikdo nedostane, ale serverový program ano.
"ale serverový program ano"
V tom právě může být ten problém, pokud bude v nějakém skriptu chyba (a nemusí to být jen náš skript), tak ten má po serveru docela volný pohyb (v rámci nastavených mezí) a tak může i do toho adresáře, kde je přístup přes HTTP zakázán.
Osobně mám přístupy také v PHP souborech (ono to ani moc jinde nejde, viz můj předchozí příspěvek), ale veškerý požadavky proháním přes centrální /dispatcher/, takže se přímo přes HTTP na soubory nikdo nedostane.
Diskuse je zrušena z důvodu spamu.