Ẩn link đăng nhập admin của WordPress cũng là một cách để bảo mật cho website WordPress của bạn. Có rất nhiều cách để thay đổi link login wp-admin của WordPress, trong bài viết này, mình sẽ chia sẻ cách sử dụng code functions thay vì dùng plugin có sẵn.
WordPress là một trong những nền tảng quản trị nội dung (CMS) phổ biến nhất thế giới, nhưng chính sự phổ biến này cũng khiến nó trở thành mục tiêu của các cuộc tấn công brute force nhắm vào trang đăng nhập mặc định
Bạn cần thay thế wp102 thành mã bí mật riêng của bạn và khi login bạn sẽ login theo link
Quản trị viên (Admin)
Người dùng thông thường (Khách hàng):
Chung cho tất cả:
Nếu bạn có thắc mắc hoặc cần hỗ trợ thêm về cách triển khai, hãy để lại câu hỏi bên dưới. Chúc bạn thành công!
WordPress là một trong những nền tảng quản trị nội dung (CMS) phổ biến nhất thế giới, nhưng chính sự phổ biến này cũng khiến nó trở thành mục tiêu của các cuộc tấn công brute force nhắm vào trang đăng nhập mặc định
/wp-admin
hoặc /wp-login.php
. Nếu bạn không muốn sử dụng plugin để ẩn link đăng nhập, bạn hoàn toàn có thể thực hiện điều này bằng cách tùy chỉnh mã nguồn. Trong bài viết này, tôi sẽ hướng dẫn bạn cách ẩn link đăng nhập wp-admin WordPress không cần plugin, vừa đơn giản vừa hiệu quả, đồng thời đảm bảo tính bảo mật cho website của bạn.Tại sao nên ẩn link đăng nhập wp-admin?
Trước tiên, hãy hiểu lý do tại sao việc thay đổi hoặc ẩn link đăng nhập lại quan trọng:- Bảo mật cơ bản: Đường dẫn mặc định
/wp-admin
hoặc/wp-login.php
là mục tiêu phổ biến của hacker và bot tự động. - Giảm tải server: Các cuộc tấn công brute force liên tục gửi yêu cầu đến trang đăng nhập có thể làm chậm website.
- Tăng tính chuyên nghiệp: Một URL tùy chỉnh giúp quản trị viên dễ dàng quản lý mà không cần dựa vào plugin, giảm nguy cơ xung đột mã nguồn.
Lợi ích của việc ẩn login website WordPress
- Không cần plugin: Giảm phụ thuộc vào bên thứ ba, giúp website nhẹ hơn và ít lỗi hơn.
- Tùy chỉnh linh hoạt: Bạn có thể thay đổi URL và khóa bí mật bất kỳ lúc nào.
- Tối ưu bảo mật: Kết hợp với các biện pháp khác như giới hạn số lần đăng nhập (dùng code hoặc plugin riêng), website của bạn sẽ an toàn hơn.
Code ẩn link login admin website WordPress
Dưới đây là code giúp bạn giấu link đăng nhập admin của website WordPress, bạn chèn code này vàofunctions.php
của theme bạn đang sử dụng
PHP:
define('PASSCODE', 'wp102'); // Đổi thành mật mã riêng của bạn
/**
* Kiểm tra và chuyển hướng khi truy cập URL với mật mã
*/
function handle_passcode_access() {
// Lấy query string hiện tại
$query = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
// Nếu query string khớp chính xác với mật mã
if ($query === PASSCODE) {
if (!is_user_logged_in()) {
// Người dùng chưa đăng nhập và có mật mã đúng - cho phép truy cập trang đăng nhập
// Đặt cookie để nhớ rằng họ đã dùng mật mã đúng
setcookie('wp_passcode_verified', md5(PASSCODE . AUTH_SALT), time() + DAY_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true);
wp_safe_redirect(home_url('wp-login.php'));
exit();
} else {
// Người dùng đã đăng nhập và có mật mã đúng - chuyển hướng dựa theo vai trò
if (current_user_can('manage_options')) {
wp_safe_redirect(admin_url());
} else {
// Kiểm tra xem có WooCommerce không
if (function_exists('wc_get_page_id') && wc_get_page_id('myaccount') > 0) {
wp_safe_redirect(get_permalink(wc_get_page_id('myaccount')));
} else {
wp_safe_redirect(home_url());
}
}
exit();
}
}
}
add_action('template_redirect', 'handle_passcode_access');
add_action('login_init', 'handle_passcode_access', 0);
/**
* Kiểm soát truy cập vào các trang đăng nhập và admin
*/
function control_access() {
// Bỏ qua nếu đang xử lý AJAX
if (wp_doing_ajax()) {
return;
}
$current_url = $_SERVER['REQUEST_URI'];
$is_login_page = strpos($current_url, 'wp-login.php') !== false;
$is_admin_page = strpos($current_url, '/wp-admin') !== false && strpos($current_url, '/admin-ajax.php') === false;
$cookie_verified = isset($_COOKIE['wp_passcode_verified']) && $_COOKIE['wp_passcode_verified'] === md5(PASSCODE . AUTH_SALT);
$post_verified = isset($_POST['passcode']) && $_POST['passcode'] === PASSCODE;
// Kiểm tra xem có phải trang tài khoản WooCommerce không
$is_account_page = false;
if (function_exists('is_account_page')) {
$is_account_page = is_account_page();
} elseif (function_exists('wc_get_page_id')) {
$account_page_id = wc_get_page_id('myaccount');
if ($account_page_id > 0 && is_page($account_page_id)) {
$is_account_page = true;
}
}
// Luôn cho phép truy cập vào trang tài khoản WooCommerce
if ($is_account_page) {
return;
}
// Cho phép đăng nhập nếu passcode được xác minh qua POST
if ($is_login_page && $post_verified) {
return;
}
// Cho phép truy cập nếu đã có cookie xác minh
if (($is_login_page || $is_admin_page) && $cookie_verified) {
return;
}
// Cho phép truy cập admin nếu người dùng có quyền quản trị
if ($is_admin_page && is_user_logged_in() && current_user_can('manage_options')) {
return;
}
// Chuyển hướng nếu người dùng không có quyền truy cập admin
if ($is_admin_page && is_user_logged_in() && !current_user_can('manage_options')) {
// Người dùng thông thường đang cố truy cập admin
if (function_exists('wc_get_page_id') && wc_get_page_id('myaccount') > 0) {
wp_safe_redirect(get_permalink(wc_get_page_id('myaccount')));
} else {
wp_safe_redirect(home_url());
}
exit();
}
// Chuyển hướng nếu cố gắng truy cập trang đăng nhập mà không có xác thực
if ($is_login_page && !$cookie_verified) {
wp_safe_redirect(home_url());
exit();
}
// Chuyển hướng nếu cố gắng truy cập trang admin mà không đăng nhập
if ($is_admin_page && !is_user_logged_in()) {
wp_safe_redirect(home_url());
exit();
}
}
add_action('init', 'control_access', 0);
/**
* Thêm trường ẩn chứa mật mã vào form đăng nhập
*/
function add_passcode_to_login_form() {
echo '<input type="hidden" name="passcode" value="' . esc_attr(PASSCODE) . '" />';
}
add_action('login_form', 'add_passcode_to_login_form');
/**
* Xử lý chuyển hướng sau khi đăng nhập thành công
*/
function login_redirect_handler($redirect_to, $requested_redirect_to, $user) {
if (!is_wp_error($user) && is_object($user) && is_a($user, 'WP_User')) {
// Đặt cookie xác minh khi đăng nhập thành công
setcookie('wp_passcode_verified', md5(PASSCODE . AUTH_SALT), time() + DAY_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true);
// Kiểm tra vai trò người dùng và chuyển hướng phù hợp
if (in_array('administrator', $user->roles) || user_can($user, 'manage_options')) {
// Là admin - chuyển hướng đến trang quản trị
return admin_url();
} else {
// Là người dùng thường - chuyển hướng đến trang phù hợp
// Kiểm tra có WooCommerce không
if (function_exists('wc_get_page_id') && wc_get_page_id('myaccount') > 0) {
// Nếu có WooCommerce, chuyển hướng đến trang tài khoản
return get_permalink(wc_get_page_id('myaccount'));
} elseif (!empty($requested_redirect_to) && $requested_redirect_to != admin_url()) {
// Sử dụng trang được yêu cầu nếu có (và không phải admin)
return $requested_redirect_to;
} else {
// Hoặc chuyển hướng đến trang chính
return home_url();
}
}
}
return $redirect_to;
}
add_filter('login_redirect', 'login_redirect_handler', 10, 3);
/**
* Xử lý đăng xuất
*/
function handle_logout() {
$current_url = $_SERVER['REQUEST_URI'];
if (strpos($current_url, 'action=logout') !== false) {
// Xóa cookie xác minh khi đăng xuất
setcookie('wp_passcode_verified', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true);
}
}
add_action('init', 'handle_logout');
/**
* Chuyển hướng sau khi đăng xuất
*/
function logout_redirect() {
wp_safe_redirect(home_url('?logged-out'));
exit();
}
add_action('wp_logout', 'logout_redirect');
/**
* Bảo vệ chống brute force
*/
function protect_against_brute_force() {
// Bỏ qua nếu đang xử lý AJAX
if (wp_doing_ajax()) {
return;
}
if (isset($_POST['log']) && isset($_POST['pwd'])) {
$ip = $_SERVER['REMOTE_ADDR'];
$failed_limit = 5;
$lockout_time = 15 * MINUTE_IN_SECONDS;
$failed_attempts = (int) get_transient('failed_login_' . $ip);
if ($failed_attempts >= $failed_limit) {
wp_die('Quá nhiều lần đăng nhập thất bại. Vui lòng thử lại sau 15 phút.', 'Đăng nhập bị khóa', ['response' => 403]);
}
}
}
add_action('login_init', 'protect_against_brute_force', 0);
/**
* Theo dõi đăng nhập thất bại
*/
function track_failed_login($username) {
$ip = $_SERVER['REMOTE_ADDR'];
$failed_attempts = (int) get_transient('failed_login_' . $ip);
$failed_attempts++;
set_transient('failed_login_' . $ip, $failed_attempts, 15 * MINUTE_IN_SECONDS);
}
add_action('wp_login_failed', 'track_failed_login');
/**
* Xóa theo dõi khi đăng nhập thành công
*/
function clear_login_attempts($user_login, $user) {
$ip = $_SERVER['REMOTE_ADDR'];
delete_transient('failed_login_' . $ip);
}
add_action('wp_login', 'clear_login_attempts', 10, 2);
/**
* Đảm bảo rằng người dùng thông thường vẫn có thể truy cập trang tài khoản WooCommerce
*/
function allow_account_access() {
// Chỉ chạy khi WooCommerce được kích hoạt
if (!function_exists('is_account_page') || !function_exists('is_wc_endpoint_url')) {
return;
}
// Cho phép truy cập vào các điểm cuối của WooCommerce
if (is_account_page() || is_wc_endpoint_url()) {
// Đảm bảo người dùng có thể truy cập các điểm cuối WooCommerce như đơn hàng, thanh toán, v.v.
return;
}
}
add_action('template_redirect', 'allow_account_access', 5);
Giải thích về cách hoạt động của code trên
Ngay đoạn đầu code, bạn sẽ thấy
Mã:
define('PASSCODE', 'wp102');
tên-miền-của-bạn/admin?mã-bí-mật
của mình đang là wp102.com/admin?wp102
Quản trị viên (Admin)
- Truy cập trang đăng nhập:
domain-cua-toi.com/?wp102
- Sau khi đăng nhập: Chuyển hướng đến
/wp-admin/
- Có quyền truy cập đầy đủ vào khu vực quản trị
Người dùng thông thường (Khách hàng):
- Truy cập trang đăng nhập:
domain-cua-toi.com/?wp102
- Sau khi đăng nhập: Chuyển hướng đến trang tài khoản (nếu có WooCommerce) hoặc trang chủ
- Không được phép truy cập vào khu vực quản trị, sẽ bị chuyển hướng đến trang tài khoản của họ
Chung cho tất cả:
- Cookie xác thực có thời hạn 24 giờ
- Bảo vệ chống brute force với giới hạn 5 lần thử thất bại
- Chuyển hướng về trang chủ sau khi đăng xuất
Tổng kết
Giấu link đăng nhập wp-admin WordPress là một giải pháp đơn giản nhưng hiệu quả để bảo vệ website của bạn khỏi các mối đe dọa cơ bản. Với vài dòng code trong functions.php, bạn đã có thể tùy chỉnh URL đăng nhập theo ý muốn mà không làm ảnh hưởng đến trải nghiệm người dùng. Là một lập trình viên có kinh nghiệm, tôi khuyến khích bạn thử nghiệm và kết hợp thêm các biện pháp bảo mật khác để website luôn an toàn.Nếu bạn có thắc mắc hoặc cần hỗ trợ thêm về cách triển khai, hãy để lại câu hỏi bên dưới. Chúc bạn thành công!