Cách thông thường để lưu trữ mật khẩu, là sử dụng hàm băm trên mật khẩu, nhưng trước salt trước mật khẩu. Điều quan trọng là phải "muối" mật khẩu, để tự bảo vệ mình trước các cuộc tấn công rainbow table.
Vì vậy bảng của bạn sẽ giống như thế
._______._________________.______________.
|user_id|hash |salt |
|-------|-----------------|--------------|
|12 |[email protected]|13%!#tQ!#3t...|
| |... |... |
Khi kiểm tra nếu một mật khẩu cho phù hợp với người sử dụng, bạn nên nối thêm muối vào mật khẩu nhất định, và tính toán hàm băm của chuỗi kết quả. Nếu đầu ra hàm băm khớp với cột hash
- đó là mật khẩu chính xác. Tuy nhiên, điều quan trọng là hiểu ý tưởng băm muối có lý do cụ thể - để ngăn chặn bất kỳ ai có quyền truy cập vào cơ sở dữ liệu khi biết mật khẩu của bất kỳ ai (nó được coi là vấn đề khó khăn để đảo ngược đầu ra hàm băm). Ví dụ: DBA của ngân hàng, sẽ không thể đăng nhập vào tài khoản ngân hàng của bạn, ngay cả khi anh ấy có quyền truy cập vào tất cả các cột.
Bạn cũng nên cân nhắc sử dụng nó nếu bạn cho rằng người dùng của mình sẽ sử dụng mật khẩu nhạy cảm (ví dụ mật khẩu của họ cho tài khoản gmail) làm mật khẩu cho trang web của bạn.
IMHO không phải lúc nào cũng là tính năng bảo mật cần thiết. Vì vậy, bạn nên suy nghĩ có hay không bạn muốn nó.
Xem this article để có bản tóm tắt tốt về cơ chế này.
Cập nhật: Điều đáng nói, để bảo mật thêm chống lại tấn công nhắm mục tiêu đảo ngược mã băm của mật khẩu cá nhân, bạn nên use bcrypt, có thể tùy ý tính toán. (Nhưng trừ khi bạn thực sự sợ người đàn ông bí ẩn đen nhắm vào cơ sở dữ liệu cụ thể của bạn, tôi nghĩ sha1 là đủ tốt. Tôi sẽ không giới thiệu một sự phụ thuộc nào khác cho dự án của tôi để bảo mật thêm nữa. 100 lần, sẽ tạo ra hiệu ứng tương tự).
Nguồn
2009-05-18 05:39:15
Nếu đó là miền AD, bạn có thể cho phép xác thực xử lý AD không? – Rytmis
Cảm ơn mọi người vì những gợi ý. Richard – Richard