Bảo mật thêm wordpress với Wp-password-bcrypt

wp-password-bcrypt là một dự án mã nguồn mở và hoàn toàn miễn phí sử dụng.

Tổng quan

wp-password-bcrypt là một plugin WordPress để thay thế hàm băm mật khẩu dựa trên MD5 lỗi thời và không an toàn của WP bằng bcrypt hiện đại và an toàn.

Plugin này yêu cầu PHP >= 5.5.0, được tích hợp các hàm password_hash và password_verify sẵn trong wordpress.

Vấn đề

WordPress vẫn sử dụng một chương trình băm mật khẩu dựa trên MD5. Điều này làm cho 25% các trang web trở nên kém an toàn hơn vì họ từ chối tăng yêu cầu PHP tối thiểu của họ. Bằng cách tiếp tục cho phép các phiên bản PHP EOL trở lại 5.2, họ không thể sử dụng các chức năng mới hơn như password_hash.

Đây là một vấn đề đã biết mà WordPress đã bỏ qua trong hơn 4 năm nay. WordPress không chỉ đặt mặc định không an toàn là MD5 mà còn không thực hiện bất kỳ hành động nào sau đây:

Giải pháp

WordPress đã làm được ít nhất một điều tốt: họ tạo ra các hàm wp_check_passwordcó wp_hash_password thể cắm được . Điều này có nghĩa là chúng ta có thể định nghĩa các hàm này trong một plugin và “ghi đè” các hàm mặc định.

Plugin này bổ sung 3 chức năng:

wp_check_password
wp_hash_password
wp_set_password
wp_hash_password
Chức năng này là đơn giản nhất. Plugin này chỉ gọi password_hashthay cho hàm băm mật khẩu mặc định của WP. wp_hash_password_options Bộ lọc có sẵn để thiết lập các tùy chọn có password_hash thể chấp nhận.

wp_check_password
Về cơ bản, hàm này chỉ gọi password_verify thay vì hàm mặc định. Tuy nhiên, nó cũng kiểm tra xem mật khẩu của người dùng đã được băm trước đó bằng hàm băm dựa trên MD5 cũ hay chưa và băm lại bằng bcrypt. Điều này có nghĩa là bạn vẫn có thể cài đặt plugin này trên một trang web hiện có và mọi thứ sẽ hoạt động liền mạch.

Bộ check_password lọc có sẵn giống như chức năng mặc định của WP.

wp_set_password
Hàm này được bao gồm ở đây theo đúng nghĩa đen nhưng có thêm chức năng trả về hàm băm. Hàm WP mặc định không trả về bất kỳ thứ gì, nghĩa là bạn sẽ băm nó hai lần mà không có lý do gì.

Hành động này wp_set_password có sẵn giống như chức năng WP mặc định.