Du som bruger ved ikke, hvordan adgangskoden er krypteret (den er faktisk slet ikke krypteret, men hashed).
Du sender blot adgangskoden, og MySQL kan udføre den samme hashing som på den originale adgangskode og sammenligne den med det, der er gemt. Hvis du passerer den hash-version, er hele fordelen ved hashing væk:Hvis nogen får hashen fra serveren, kan de bare bruge dem til at logge ind, som om de var normale adgangskoder. Hash'en er så blevet til adgangskoden.
Ekstra fordel er, at MySQL, fordi den har den originale adgangskode, kunne genhash den med en bedre algoritme, tilføje en smule salt og gemme den forbedrede version. Hvis det aldrig bliver originalen, kan det ikke lade sig gøre. PHP's adgangskodefunktioner
støtte også dette. Du kan tjekke med password_needs_rehash
hvis en hashed adgangskode stadig er hashed korrekt, og opdater din database, hvis den ikke er det.
Så for sikkerheden skal du tage andre forholdsregler. Disse er i det mindste:
- Gem adgangskoden i en include-fil, der findes uden for dokumentroden. På den måde kan ingen åbne filen direkte.
- Du kan forhindre, at include-filer åbnes uden at blive inkluderet (f.eks. ved at tjekke efter en define, der blev sat i index.php). Det er rart, men hvis PHP fejler på grund af en konfigurationsfejl, kan folk bare gennemse filens kilde, så hold den forrige regel.
- Opret altid en speciel databasebruger. Brug ikke
root
. Giv denne bruger lige nok ret til at betjene databasen, men ikke mere. Ingen rettigheder til at droppe tabeller for eksempel. - Giv altid denne bruger en unik adgangskode. Du behøver ikke at huske denne adgangskode. Bare generer tilfældigt affald med masser af tegn.
- Skift adgangskoden regelmæssigt. Måske kunne du endda scripte det og gemme den opdaterede adgangskode i konfigurationen.