Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tại sao mysqli_connect () phải nhận tham số mật khẩu mà không có mã hóa?

Bạn với tư cách là người dùng không biết mật khẩu được mã hóa như thế nào (nó thực sự không được mã hóa mà chỉ được băm).

Bạn chỉ cần chuyển mật khẩu và MySQL có thể thực hiện băm giống như trên mật khẩu ban đầu và so sánh nó với những gì được lưu trữ. Nếu bạn vượt qua phiên bản băm, toàn bộ lợi ích của việc băm sẽ không còn nữa:Nếu ai đó nhận được mã băm từ máy chủ, họ chỉ có thể sử dụng chúng để đăng nhập như thể họ là mật khẩu bình thường. Sau đó, băm đã trở thành mật khẩu.

Lợi ích bổ sung là MySQL, bởi vì nó có mật khẩu ban đầu, có thể băm lại nó bằng một thuật toán tốt hơn, thêm một chút muối và lưu trữ phiên bản cải tiến đó. Nếu nó không bao giờ có được bản gốc, điều đó không thể được thực hiện. Các hàm mật khẩu của PHP hỗ trợ điều này là tốt. Bạn có thể kiểm tra bằng password_needs_rehash nếu mật khẩu băm vẫn được băm đúng cách và cập nhật cơ sở dữ liệu của bạn nếu không.

Vì vậy, để bảo mật, bạn sẽ cần phải thực hiện các biện pháp khác. Ít nhất là:

  • Lưu trữ mật khẩu trong một tệp bao gồm nằm bên ngoài thư mục gốc của tài liệu. Bằng cách đó, không ai có thể mở tệp đó trực tiếp.
  • Bạn có thể ngăn việc mở các tệp bao gồm mà không được đưa vào (ví dụ:bằng cách kiểm tra định nghĩa được đặt trong index.php). Điều đó thật tuyệt, nhưng nếu PHP không thành công do lỗi cấu hình, mọi người chỉ có thể duyệt qua nguồn của tệp, vì vậy hãy tuân thủ quy tắc trước đó.
  • Luôn tạo một người dùng cơ sở dữ liệu đặc biệt. Không sử dụng root . Cấp cho người dùng này quyền vừa đủ để vận hành cơ sở dữ liệu, nhưng không cần thêm nữa. Chẳng hạn, không có quyền bỏ bảng.
  • Luôn cung cấp cho người dùng đó một mật khẩu duy nhất. Bạn không cần phải nhớ mật khẩu này. Chỉ cần tạo rác ngẫu nhiên với nhiều ký tự.
  • Thay đổi mật khẩu thường xuyên. Có thể bạn thậm chí có thể tập lệnh đó và lưu trữ mật khẩu đã cập nhật trong cấu hình.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy cập IP Mysql từ xa

  2. cập nhật nhiều lần bằng ajax với php

  3. Tạo cơ sở dữ liệu với JPA?

  4. Ngăn chặn truyền chuỗi mysql thành int trong mệnh đề where

  5. Truy vấn chọn MySQL rất chậm