Cải thiện bảo mật trang web WordPress của bạn và thực thi mật khẩu mạnh cho tất cả người dùng trang web của bạn. Chúng tôi sẽ đảm bảo an toàn cho trang web của bạn bằng cách chỉ thêm một chút mã vào chủ đề của bạn.
Để làm theo hướng dẫn này, bạn cần sử dụng một chủ đề con tùy chỉnh, vì vậy chúng tôi có thể thực hiện các thay đổi đối với functions.php. Chúng tôi sẽ giữ cho mã gọn gàng bằng cách sử dụng một tệp PHP độc lập, vì vậy sẽ thực sự dễ dàng sử dụng lại nó trong các dự án WordPress khác.
Nếu trang web của bạn được lưu trữ bằng Headwall Hosting thì bạn không cần phải làm theo hướng dẫn này, vì các gói lưu trữ WordPress được quản lý của chúng tôi tự động thực thi mật khẩu người dùng mạnh cho bạn.
Hãy thử kết hợp hướng dẫn này với việc tắt tính năng liệt kê người dùng và ẩn wp-login.php của bạn khỏi bot để tăng tính bảo mật cho trang web của bạn hơn nữa.
Xác định các vấn đề
Trước khi bắt đầu chạm vào bàn phím, chúng ta cần hiểu rõ vấn đề là gì và chúng ta sẽ giải quyết nó như thế nào. Chúng tôi không cần một kế hoạch dự án lớn, nhưng nếu bạn có một ý tưởng rõ ràng về luồng logic trước khi bắt đầu viết mã, thì việc viết mã sẽ dễ dàng hơn và nó sẽ là mã tốt hơn - thông thường.- Ngăn người dùng trang web của bạn có thể đặt mật khẩu yếu.
- Mã phải nằm trong một tệp PHP độc lập mà chúng tôi có thể đưa vào bất kỳ dự án WordPress nào của mình trong tương lai và nó sẽ hoạt động.
- Chúng tôi không muốn có thêm bất kỳ phụ thuộc JavaScript nào nếu chúng tôi có thể tránh chúng.
Hãy viết một số mã
Chúng tôi cần một nơi nào đó để viết mã của mình, vì vậy hãy chuyển đến thư mục cho chủ đề con tùy chỉnh của bạn, tạo một tệp mới có tên là functions-strong-mật khẩu.php và dán đoạn mã sau vào đó./** * Enforce strong passwords (ESP) for site users. * * To disable enforcing strong passwords: * define('ESP_IS_ENABLED', false); */ if (!defined('WPINC')) { exit('Do NOT access this file directly.'); } /** * Initialise constants and handlers. */ function esp_init() { if (defined('ESP_IS_ENABLED') && (ESP_IS_ENABLED === false)) { // Disabled by configuration. } else { // Hook into WordPress here... // ... } } add_action('init', 'esp_init'); /** * Given a password, return true if it's OK, otherwise return false. */ function esp_is_password_ok($password, $user_name) { $is_ok = false; // ... return $is_ok; }Đây là khung của mô-đun nhỏ của chúng tôi. Để đảm bảo nó được tham chiếu bởi WordPress, chúng tôi chỉ cần thêm phần sau vào tệp functions.php của chủ đề con của bạn .
// Enforce strong passwords. require_once 'functions-strong-passwords.php';Hai đoạn mã này là điểm khởi đầu để mở rộng một chủ đề con tùy chỉnh… đưa chúng ta vào cửa. Bây giờ tất cả những gì chúng ta cần làm là nối ba hành động và đặt mã kiểm tra mật khẩu của chúng ta trong hàm esp_is_password_ok ().
Thực thi độ mạnh của mật khẩu
Chức năng thực thi một mật khẩu mạnh khá đơn giản - đúng như vậy. Chỉ là một hàm duy nhất nhận một vài tham số đầu vào và trả về giá trị true hoặc false. Hãy xem nó - đừng sao chép và dán cái này. Danh sách mã đầy đủ ở cuối bài ..function esp_is_password_ok($password, $user_name) { // Default to the password not being valid - fail safe. $is_ok = false; $password = sanitize_text_field($password); $user_name = sanitize_text_field($user_name); $is_number_found = preg_match('/[0-9]/', $password); $is_lowercase_found = preg_match('/[a-z]/', $password); $is_uppercase_found = preg_match('/[A-Z]/', $password); $is_symbol_found = preg_match('/[^a-zA-Z0-9]/', $password); if (strlen($password) < 8) { // Too short } elseif (strtolower($user_name) == strtolower($password)) { // User name and password can't be the same. } elseif (!$is_number_found) { // ... } elseif (!$is_lowercase_found) { // ... } elseif (!$is_uppercase_found) { // ... } elseif (!$is_symbol_found) { // ... } else { // Password is OK. $is_ok = true; } return $is_ok; }Mã này phải dễ đọc từ đầu đến cuối. Môn phái nghệ thuật đen duy nhất là công cụ preg_match (). Những hàm vui nhộn này được gọi là biểu thức chính quy - một khái niệm thực sự mạnh mẽ nhưng chúng có thể hơi phức tạp để khiến bạn hiểu ngay từ đầu. Bởi vì biểu thức thông thường có thể được khôn lanh, chúng tôi lưu trữ các kết quả của các chức năng này trong tên biến mà là dễ đọc. Bằng cách đó, chúng ta có thể viết một loạt các câu lệnh if / elseif thực sự rõ ràng. Ngay cả những người không phải là lập trình viên cũng có thể nhìn vào chức năng này, xem nó hoạt động như thế nào và tìm ra mật khẩu cần…
- Độ dài ít nhất 8 ký tự.
- Tên người dùng và mật khẩu không được giống nhau.
- Mật khẩu phải có ít nhất một số, một ký tự viết thường, một ký tự viết hoa và một ký hiệu.
Để tất cả chúng cùng nhau
Chúng tôi đã trình bày cấu trúc của functions-strong-password.php và sắp xếp logic cho mã tốt hay xấu của mật khẩu, vì vậy hãy tập hợp tất cả lại với nhau. Đây là toàn bộ nội dung của tệp functions-strong-password.php của chúng tôi ./** * Enforce strong passwords (ESP) for all website users. * * To disable enforcing strong passwords: * define('ESP_IS_ENABLED', false); */ if (!defined('WPINC')) { exit('Do NOT access this file directly.'); } /** * Initialise constants and handlers. */ function esp_init() { if (defined('ESP_IS_ENABLED') && (ESP_IS_ENABLED === false)) { // Disabled by configuration. } else { add_action('user_profile_update_errors', 'esp_user_profile_update_errors', 0, 3); add_action('resetpass_form', 'esp_resetpass_form', 10); add_action('validate_password_reset', 'esp_validate_password_reset', 10, 2); } } add_action('init', 'esp_init'); function esp_user_profile_update_errors($errors, $update, $user_data) { return esp_validate_password_reset($errors, $user_data); } function esp_resetpass_form($user_data) { return esp_validate_password_reset(false, $user_data); } /** * Sanitise the input parameters and then check the password strength. */ function esp_validate_password_reset($errors, $user_data) { $is_password_ok = false; $user_name = null; if (isset($_POST['user_login'])) { $user_name = sanitize_text_field($_POST['user_login']); } elseif (isset($user_data->user_login)) { $user_name = $user_data->user_login; } else { // No user specified. } $password = null; if (isset($_POST['pass1']) && !empty(trim($_POST['pass1']))) { $password = sanitize_text_field(trim($_POST['pass1'])); } $error_message = null; if (is_null($password)) { // Don't do anything if there isn't a password to check. } elseif (is_wp_error($errors) && $errors->get_error_data('pass')) { // We've already got a password-related error. } elseif (empty($user_name)) { $error_message = __('User name cannot be empty.'); } elseif (!($is_password_ok = esp_is_password_ok($password, $user_name))) { $error_message = __('Password is not strong enough.'); } else { // Password is strong enough. All OK. } if (!empty($error_message)) { $error_message = 'ERROR: ' . $error_message; if (!is_a($errors, 'WP_Error')) { $errors = new WP_Error('pass', $error_message); } else { $errors->add('pass', $error_message); } } return $errors; } /** * Given a password, return true if it's OK, otherwise return false. */ function esp_is_password_ok($password, $user_name) { // Default to the password not being valid - fail safe. $is_ok = false; $password = sanitize_text_field($password); $user_name = sanitize_text_field($user_name); $is_number_found = preg_match('/[0-9]/', $password); $is_lowercase_found = preg_match('/[a-z]/', $password); $is_uppercase_found = preg_match('/[A-Z]/', $password); $is_symbol_found = preg_match('/[^a-zA-Z0-9]/', $password); if (strlen($password) < 8) { // Too short } elseif (strtolower($user_name) == strtolower($password)) { // User name and password can't be the same. } elseif (!$is_number_found) { // ... } elseif (!$is_lowercase_found) { // ... } elseif (!$is_uppercase_found) { // ... } elseif (!$is_symbol_found) { // ... } else { // Password is OK. $is_ok = true; } return $is_ok; }Đây là bạn có nó. Chạy một số thử nghiệm và cố gắng đặt mật khẩu yếu cho một trong những người dùng của bạn - bạn sẽ thấy rằng nó sẽ không cho phép bạn làm điều đó. Thắng lợi!
Không còn người dùng nào có “password1234” để đăng nhập.