Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum muss mysqli_connect() den Passwortparameter ohne Verschlüsselung erhalten?

Sie als Benutzer wissen nicht, wie das Passwort verschlüsselt ist (es ist eigentlich gar nicht verschlüsselt, sondern gehasht).

Sie übergeben einfach das Passwort, und MySQL kann das gleiche Hashing wie beim ursprünglichen Passwort durchführen und es mit dem vergleichen, was gespeichert ist. Wenn Sie die gehashte Version weitergeben, ist der gesamte Nutzen des Hashings weg:Wenn jemand die Hashes vom Server erhält, kann er sich damit einfach wie mit normalen Passwörtern anmelden. Der Hash ist dann zum Passwort geworden.

Ein zusätzlicher Vorteil ist, dass MySQL, da es das ursprüngliche Passwort hat, es mit einem besseren Algorithmus neu hashen, ein bisschen Salz hinzufügen und diese verbesserte Version speichern könnte. Wenn es nie das Original bekommt, geht das nicht. Passwortfunktionen von PHP unterstützt dies ebenfalls. Sie können dies mit password_needs_rehash überprüfen wenn ein gehashtes Passwort immer noch richtig gehasht ist, und aktualisieren Sie Ihre Datenbank, wenn dies nicht der Fall ist.

Aus Sicherheitsgründen müssen Sie also andere Maßnahmen ergreifen. Dies sind mindestens:

  • Speichern Sie das Passwort in einer Include-Datei, die sich außerhalb des Dokumentstammverzeichnisses befindet. Auf diese Weise kann niemand diese Datei direkt öffnen.
  • Sie können verhindern, dass Include-Dateien geöffnet werden, ohne eingebunden zu werden (zB indem Sie nach einem Define suchen, das in index.php gesetzt wurde). Das ist nett, aber wenn PHP aufgrund eines Konfigurationsfehlers fehlschlägt, können die Leute einfach die Quelle der Datei durchsuchen, also halten Sie sich an die vorherige Regel.
  • Machen Sie immer einen speziellen Datenbankbenutzer. Verwenden Sie nicht root . Geben Sie diesem Benutzer gerade genug Rechte, um die Datenbank zu betreiben, aber nicht mehr. Keine Rechte zum Beispiel zum Löschen von Tabellen.
  • Geben Sie diesem Benutzer immer ein eindeutiges Passwort. Sie müssen sich dieses Passwort nicht merken. Erzeuge einfach zufälligen Müll mit vielen Zeichen.
  • Ändern Sie das Passwort regelmäßig. Vielleicht könnten Sie das sogar skripten und das aktualisierte Passwort in der Konfiguration speichern.