U als gebruiker weet niet hoe het wachtwoord versleuteld is (het is eigenlijk helemaal niet versleuteld, maar gehasht).
U geeft gewoon het wachtwoord door en MySQL kan dezelfde hashing uitvoeren als op het oorspronkelijke wachtwoord en het vergelijken met wat is opgeslagen. Als je de gehashte versie doorgeeft, is het hele voordeel van hashing verdwenen:als iemand de hashes van de server krijgt, kunnen ze die gewoon gebruiken om in te loggen alsof het normale wachtwoorden zijn. De hash is dan het wachtwoord geworden.
Bijkomend voordeel is dat MySQL, omdat het het originele wachtwoord heeft, het opnieuw kan hashen met een beter algoritme, een beetje zout kan toevoegen en die verbeterde versie kan opslaan. Als het nooit het origineel krijgt, kan dat niet. PHP's wachtwoordfuncties
ondersteunen dit ook. U kunt controleren met password_needs_rehash
als een gehasht wachtwoord nog steeds correct gehasht is, en update uw database als dit niet het geval is.
Voor de veiligheid zult u dus andere maatregelen moeten nemen. Dit zijn in ieder geval:
- Sla het wachtwoord op in een include-bestand dat zich buiten de hoofdmap van het document bevindt. Op die manier kan niemand dat bestand rechtstreeks openen.
- Je kunt voorkomen dat include-bestanden worden geopend zonder te worden opgenomen (bijvoorbeeld door te controleren op een definitie die is ingesteld in index.php). Dat is leuk, maar als PHP faalt vanwege een configuratiefout, kunnen mensen gewoon door de bron van het bestand bladeren, dus houd je aan de vorige regel.
- Maak altijd een speciale databasegebruiker aan. Gebruik geen
root
. Geef deze gebruiker net genoeg recht om de database te bedienen, maar niet meer. Geen rechten om tabellen te laten vallen bijvoorbeeld. - Geef die gebruiker altijd een uniek wachtwoord. U hoeft dit wachtwoord niet te onthouden. Genereer gewoon willekeurig afval met veel karakters.
- Verander het wachtwoord regelmatig. Misschien kun je dat zelfs scripten en het bijgewerkte wachtwoord in de configuratie opslaan.