sql >> Databasteknik >  >> RDS >> Mysql

Varför måste mysqli_connect() ta emot lösenordsparametern utan kryptering?

Du som användare vet inte hur lösenordet är krypterat (det är faktiskt inte alls krypterat utan hashat).

Du skickar bara lösenordet, och MySQL kan utföra samma hashning som på det ursprungliga lösenordet och jämföra det med det som lagras. Om du klarar den hashade versionen är hela fördelen med hash borta:Om någon får hasharna från servern kan de bara använda dem för att logga in som om de vore vanliga lösenord. Hash har då blivit lösenordet.

Ytterligare fördel är att MySQL, eftersom det har det ursprungliga lösenordet, kunde hasha det igen med en bättre algoritm, lägga till lite salt och lagra den förbättrade versionen. Om den aldrig får originalet går det inte att göra. PHP:s lösenordsfunktioner stödja detta också. Du kan kontrollera med password_needs_rehash om ett hashat lösenord fortfarande hashas korrekt, och uppdatera din databas om det inte är det.

Så för säkerhets skull måste du vidta andra åtgärder. Dessa är åtminstone:

  • Lagra lösenordet i en include-fil som finns utanför dokumentroten. På så sätt kan ingen öppna den filen direkt.
  • Du kan förhindra att include-filer öppnas utan att inkluderas (till exempel genom att leta efter en definition som sattes i index.php). Det är trevligt, men om PHP misslyckas på grund av ett konfigurationsfel kan folk bara bläddra i filens källa, så håll fast vid den tidigare regeln.
  • Använd alltid en speciell databas. Använd inte root . Ge denna användare precis tillräckligt med rätt att använda databasen, men inte mer. Inga rättigheter att släppa tabeller till exempel.
  • Ge alltid användaren ett unikt lösenord. Du behöver inte komma ihåg detta lösenord. Skapa bara slumpmässigt skräp med massor av tecken.
  • Ändra lösenordet regelbundet. Kanske kan du till och med skripta det och lagra det uppdaterade lösenordet i konfigurationen.



  1. ERSÄTT rader i mysql databastabell med pandas DataFrame

  2. Ta bort dubbletter av rader som har fler än 1 i mysql

  3. Finns det några bra CachedRowSet-implementeringar förutom den proprietära Sun?

  4. Lägg till data till befintliga data i MySQL Database