Vy jako uživatel nevíte, jak je heslo zašifrováno (ve skutečnosti není zašifrováno vůbec, ale zahašováno).
Stačí předat heslo a MySQL může provést stejné hashování jako u původního hesla a porovnat ho s tím, co je uloženo. Pokud předáte hašovanou verzi, celá výhoda hašování je pryč:Pokud někdo získá hash ze serveru, může je použít k přihlášení, jako by to byla normální hesla. Hash se pak stal heslem.
Další výhodou je, že MySQL, protože má původní heslo, jej může znovu zahašovat pomocí lepšího algoritmu, přidat trochu soli a uložit tuto vylepšenou verzi. Pokud nikdy nedostane originál, tak to nejde. Funkce hesel PHP
toto také podpořte. Můžete to zkontrolovat pomocí password_needs_rehash
pokud je hashované heslo stále správně zahašováno, a pokud tomu tak není, aktualizujte svou databázi.
Z důvodu bezpečnosti tedy budete muset přijmout další opatření. Jsou to alespoň:
- Uložte heslo do začleněného souboru, který se nachází mimo kořen dokumentu. Tímto způsobem nikdo nemůže otevřít tento soubor přímo.
- Můžete zabránit tomu, aby byly zahrnuty soubory otevřeny, aniž by byly zahrnuty (například kontrolou definice, která byla nastavena v index.php). To je hezké, ale pokud PHP selže kvůli chybě konfigurace, lidé mohou pouze procházet zdrojový kód souboru, takže se držte předchozího pravidla.
- Vždy vytvořte speciálního uživatele databáze. Nepoužívejte
root
. Dejte tomuto uživateli tolik práva, aby mohl provozovat databázi, ale ne více. Například žádná práva na zrušení tabulek. - Vždy tomuto uživateli dávejte jedinečné heslo. Toto heslo si nemusíte pamatovat. Stačí vygenerovat náhodný odpad se spoustou postav.
- Pravidelně měňte heslo. Možná byste to mohli dokonce naskriptovat a uložit aktualizované heslo do konfigurace.