Hướng dẫn dùng rehash trong PHP
Gần đây tôi đã cố gắng thực hiện bảo mật của riêng mình trên một kịch bản đăng nhập mà tôi tình cờ thấy trên internet. Sau khi cố gắng học cách tạo tập lệnh của riêng tôi để tạo muối cho mỗi người dùng, tôi tình cờ tìm thấy password_hash. Từ những gì tôi hiểu (dựa trên việc đọc trên trang này: http://php.net/manual/en/faq.passwords.php ), muối đã được tạo trong hàng khi bạn sử dụng mật khẩu_hash. Điều này có đúng không? Một câu hỏi khác mà tôi có là, liệu có 2 muối không? Một trực tiếp trong tập tin và một trong DB? Bằng cách đó, nếu ai đó thỏa hiệp muối của bạn trong DB, bạn vẫn có trực tiếp trong tệp? Tôi đọc ở đây rằng lưu trữ muối không bao giờ là một ý tưởng thông minh, nhưng nó luôn làm tôi bối rối không biết mọi người có ý gì. Sử dụng Giả sử chúng ta có đầu vào sau:
Tôi không xác nhận đầu vào chỉ để hiểu khái niệm này. Trước tiên, bạn băm mật khẩu bằng cách này:
Sau đó xem đầu ra:
Như bạn có thể thấy nó được băm. (Tôi giả sử bạn đã làm những bước đó). Bây giờ bạn lưu trữ hashed_password này trong cơ sở dữ liệu của bạn, và sau đó giả sử khi người dùng yêu cầu đăng nhập chúng. Bạn kiểm tra mật khẩu nhập với giá trị băm này trong cơ sở dữ liệu, bằng cách thực hiện:
Tham khảo chính thức Có bạn đã hiểu chính xác, hàm password_hash () sẽ tự tạo một muối và bao gồm nó trong giá trị băm kết quả. Lưu trữ muối trong cơ sở dữ liệu là hoàn toàn chính xác, nó thực hiện công việc của mình ngay cả khi biết.
Muối thứ hai mà bạn đề cập (một loại được lưu trữ trong một tệp), thực sự là một hạt tiêu hoặc một khóa bên máy chủ. Nếu bạn thêm nó trước khi băm (như muối), sau đó bạn thêm một hạt tiêu. Mặc dù vậy, có một cách tốt hơn, trước tiên bạn có thể tính toán hàm băm và sau đó mã hóa (hai chiều) hàm băm bằng khóa phía máy chủ. Điều này cung cấp cho bạn khả năng thay đổi chìa khóa khi cần thiết. Ngược lại với muối, chìa khóa này nên được giữ bí mật. Mọi người thường trộn nó lên và cố gắng giấu muối, nhưng tốt hơn là để muối làm công việc của nó và thêm bí mật bằng một chìa khóa. Vâng đúng vậy. Tại sao bạn nghi ngờ các faq php trên chức năng? :) Kết quả của việc chạy
Vì vậy, như bạn có thể thấy, băm là một phần của nó. Chắc chắn, bạn có thể có thêm một loại muối cho một lớp bảo mật bổ sung, nhưng tôi thành thật nghĩ rằng đó là quá mức cần thiết trong một ứng dụng php thông thường. Thuật toán bcrypt mặc định là tốt, và người thổi tùy chọn thậm chí còn tốt hơn. Có một sự thiếu thảo luận rõ ràng về khả năng tương thích ngược và xuôi được tích hợp trong các chức năng mật khẩu của PHP. Đáng chú ý:
Ví dụ:
Đầu ra:
Như một lưu ý cuối cùng, do bạn chỉ có thể băm lại mật khẩu của người dùng khi đăng nhập, bạn nên xem xét việc băm "không an toàn" để bảo vệ người dùng của mình. Điều này có nghĩa là sau một thời gian gia hạn nhất định, bạn sẽ xóa tất cả các băm không an toàn [ví dụ: MD5/SHA/nếu không yếu] và người dùng của bạn dựa vào các cơ chế đặt lại mật khẩu của ứng dụng. Không bao giờ sử dụng md5 () để bảo mật mật khẩu của bạn, ngay cả với muối, nó luôn nguy hiểm !! Làm cho mật khẩu của bạn được bảo mật với các thuật toán băm mới nhất như dưới đây.
Để khớp với mật khẩu được mã hóa của cơ sở dữ liệu và mật khẩu người dùng nhập vào, hãy sử dụng chức năng dưới đây.
Nếu bạn muốn sử dụng muối của riêng bạn, hãy sử dụng chức năng được tạo tùy chỉnh của bạn cho cùng, chỉ cần làm theo bên dưới, nhưng tôi không khuyến nghị điều này vì nó bị phản đối trong các phiên bản mới nhất của PHP. đọc cái này http://php.net/manual/en/feft.password-hash.php trước khi sử dụng mã bên dưới.
Hy vọng tất cả những điều này sẽ giúp !! Mật khẩu lớp đầy đủ:
|