很多初学者认为设置了复杂的密码就安全了,但黑客通常会使用自动化脚本通过默认的路径(如 wp-admin)不断尝试暴力破解。WPS Hide Login 的作用就是把这个"大门"藏起来,让机器人连门都找不到。
核心提示: 隐藏后台地址(Security by Obscurity)虽然不是网络安全的全部,但它是抵御 99% 自动化扫描的第一道防线。
WPS Hide Login插件
登录你的 WordPress 后台,在左侧菜单点击 插件 > 安装插件 。在搜索框输入 WPS Hide Login,并且下载WPS Hide Login。

激活后,插件会自动跳转到设置页面(你也可以在 设置 > WPS Hide Login 页面最下方找到它)。


- 登录地址 (Login URL):删掉默认的
login,改成一个只有你自己知道的词。别用admin、webmaster、mima这种好猜的词。建议用拼音、缩写或短句。 - . 重定向地址 (Redirection URL):当别人尝试访问原来的
wp-admin或wp-login.php时,网站会展示404
保存并备份你的地址
点击 保存更改 。将你的新登录地址添加到浏览器收藏夹 ,或者记在手机备忘录里。例如:https://xxxx.com/你的秘密词汇/, 退出登录,或者开一个浏览器的"无痕模式",尝试用旧地址进入(看是否显示 404),再用新地址进入(确认能否成功打开登录窗)。
MU插件
MU-Plugins 比普通插件更强大,它们位于 /wp-content/mu-plugins/ 目录中,不需要激活就会自动运行,且无法在后台被禁用或删除,非常适合存放安全代码。
-
通过 FTP 或主机管理面板进入
/wp-content/目录。 -
如果不存在
mu-plugins文件夹,请新建一个。 -
将
my-security.php上传到/wp-content/mu-plugins/。
方案一:高阶环境伪装(Nginx 欺骗流) 核心逻辑: 如果访问者没有携带正确的"双重暗号",网站将返回一个完美的 Nginx 404 页面,并修改 Header 信息,让黑客工具误以为该路径不存在。
php
<?php
/*
Plugin Name: Perfect Nginx Deception
Description: 伪装成 Nginx 404 错误并拦截非授权登录请求
*/
add_action('login_init', 'perfect_nginx_deception');
function perfect_nginx_deception(){
// 1. 定义白名单动作:允许正常流程(如注销、找回密码)不被拦截
$allowed_actions = array('logout', 'lostpassword', 'rp', 'resetpass');
$current_action = isset($_GET['action']) ? $_GET['action'] : '';
// 2. 验证暗号:访问地址必须包含 /wp-login.php?k=Vp9_x2&auth=true
$is_valid = (isset($_GET['k']) && $_GET['k'] === 'Vp9_x2') &&
(isset($_GET['auth']) && $_GET['auth'] === 'true');
// 3. 执行拦截逻辑
if (!isset($_POST['log']) && !in_array($current_action, $allowed_actions) && !$is_valid) {
if (ob_get_length()) ob_clean(); // 清除缓冲防止信息泄露
status_header(404); // 发送标准 404 状态码
// 伪装 HTTP 响应头
header("Content-Type: text/html; charset=utf-8");
header("X-Powered-By: nginx");
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");
// 输出 Nginx 风格的 404 页面
echo '<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>';
exit();
}
}
方案二:动态时间暗号(过期失效流)
核心逻辑: 登录地址携带的参数是基于"当前日期 + 盐值"生成的 MD5 哈希。这意味着即使地址泄露,第二天也会失效。
php
<?php
/*
Plugin Name: Dynamic Login Protection
Description: 基于日期生成的动态登录暗号
*/
add_action('login_enqueue_scripts', 'dynamic_login_protection');
function dynamic_login_protection(){
date_default_timezone_set('Asia/Shanghai');
// 生成基于日期的哈希值(取前6位)
// 盐值 'YourSalt' 请自行修改
$correct_token = substr(md5(date('Y-m-d') . 'YourSalt'), 0, 6);
// 访问示例:wp-login.php?key=xxxxxx
if(!isset($_GET['key']) || $_GET['key'] !== $correct_token) {
wp_redirect(home_url()); // 错误则跳转到首页
exit();
}
}
方案三:Cookie 门禁(前置验证流) 核心逻辑: 类似于"两步验证"。管理员必须先访问一个特殊的 URL(例如 yourdomain.com/unlock.php)来植入一个 Cookie,之后才能打开 wp-login.php。
php
<?php
/*
Plugin Name: Cookie Login Protection
Description: 必须持有特定的身份 Cookie 才能访问登录页
*/
add_action('login_init', 'cookie_login_protection');
function cookie_login_protection(){
// 如果没有检测到名为 access_allowed 的 Cookie,则禁止访问
if (!isset($_COOKIE['access_allowed'])) {
header('HTTP/1.1 403 Forbidden');
die('Access Denied: Please authenticate first.');
}
}
方案三:.htaccess 物理封锁 即使有上述代码,文件 wp-login.php 依然存在于磁盘。在 Apache 服务器中,可以在 .htaccess 中加入以下代码,实现从服务器层面直接拦截
php
# 在 .htaccess 中添加
<Files "wp-login.php">
RewriteEngine On
# 只有当查询字符串匹配 your_secret_key=your_secret_value 时才允许访问
RewriteCond %{QUERY_STRING} !^your_secret_key=your_secret_value$
# 其余所有请求全部跳转到 404 页面
RewriteRule ^(.*)$ https://%{HTTP_HOST}/404 [L,R=301]
</Files>