sql >> Databáze >  >> RDS >> Mysql

Proč musí mysqli_connect() obdržet parametr hesla bez šifrování?

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.



  1. třída nenalezena výjimka com.mysql.jdbc.driver

  2. Volání PDO z funkce

  3. Získejte základní sloupce zobrazení na základě sady výsledků

  4. Jak jarní úklid databáze