Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego mysqli_connect() musi otrzymać parametr hasła bez szyfrowania?

Ty jako użytkownik nie wiesz, w jaki sposób hasło jest szyfrowane (w rzeczywistości nie jest ono w ogóle zaszyfrowane, ale zaszyfrowane).

Po prostu przekazujesz hasło, a MySQL może wykonać to samo haszowanie, co w przypadku oryginalnego hasła i porównać je z tym, co jest przechowywane. Jeśli przekażesz haszowaną wersję, cała korzyść z haszowania zniknie:jeśli ktoś otrzyma hasze z serwera, może po prostu użyć ich do zalogowania się tak, jakby były zwykłymi hasłami. Skrót stał się wówczas hasłem.

Dodatkową korzyścią jest to, że MySQL, ponieważ ma oryginalne hasło, może je ponownie zahaszować lepszym algorytmem, dodać trochę soli i przechowywać ulepszoną wersję. Jeśli nigdy nie otrzyma oryginału, nie da się tego zrobić. Funkcje haseł PHP wesprzyj to również. Możesz to sprawdzić za pomocą password_needs_rehash jeśli zaszyfrowane hasło jest nadal poprawnie zaszyfrowane, a jeśli tak nie jest, zaktualizuj swoją bazę danych.

Tak więc ze względów bezpieczeństwa będziesz musiał podjąć inne środki. Są to co najmniej:

  • Przechowuj hasło w pliku dołączanym, który znajduje się poza katalogiem głównym dokumentu. W ten sposób nikt nie może bezpośrednio otworzyć tego pliku.
  • Możesz zapobiec otwieraniu plików dołączanych bez dołączania (na przykład sprawdzając definicję, która została ustawiona w index.php). To fajnie, ale jeśli PHP zawiedzie z powodu błędu konfiguracji, ludzie mogą po prostu przeglądać źródła pliku, więc trzymaj się poprzedniej reguły.
  • Zawsze twórz specjalnego użytkownika bazy danych. Nie używaj root . Daj temu użytkownikowi tylko tyle praw do obsługi bazy danych, ale nie więcej. Na przykład brak praw do upuszczania tabel.
  • Zawsze nadaj temu użytkownikowi unikalne hasło. Nie musisz pamiętać tego hasła. Po prostu generuj losowe śmieci z dużą ilością znaków.
  • Regularnie zmieniaj hasło. Może mógłbyś nawet to napisać i zapisać zaktualizowane hasło w konfiguracji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sparametryzowane zapytanie z kilkoma opcjonalnymi terminami wyszukiwania

  2. Pobierz najnowszy wiersz dla podanego identyfikatora

  3. Przechowywanie obrazów w bazie danych mysql

  4. Uzyskiwanie warunkowych liczy się do tego samego wiersza w MySQL / SQL

  5. Zmień kodowanie listy obiektów