上篇文章解决了黑客利用xmlrpc.php接口暴力破解我的WordPress个人网站的问题,但还留有一些小问题没解决。首先:黑客是怎么知道我的管理员用户名的?有了正确的管理员用户名,黑客攻破网站的难度直接减了一半,猜对管理员密码就行了。其次:如何防止黑客扫描出WordPress管理员用户名?最后:如何修改已经暴露了的WordPress管理员用户名?
黑客是怎么知道管理员用户名的?
-
默认情况下,访问 https://anjir.top/?author=1 这样的链接,会自动跳转到 https://anjir.top/author/你的用户名/,从而暴露了用户名为 admin(如果用户ID是1)或你的新用户名。很好理解,网站的第一个用户,肯定是站长了,也就是有最高权限的管理员。 -
WordPress REST API 是一个列出用户名的接口,访问https://anjir.top/wp-json/wp/v2/users,会返回所有用户信息。 -
WordPress 在文章作者处显示的可能默认是你的用户名。
如何防止黑客扫描出WordPress管理员用户名?
用 Nginx 拦截“/?author=”和“屏蔽 REST API 接口”
1.编辑站点配置文件 app.conf:
nano ./nginx/conf.d/app.conf
2.添加新的安全规则:
在 HTTPS (443) 的 server { ... } 内部,将这些安全规则放在一起,便于管理。可以放在 server_name 的下面。
server {
listen 443 ssl http2;
server_name anjir.top www.anjir.top;
# ... SSL 证书配置等 ...
# ================== 新增安全规则 开始 ==================
# 1. 防止通过 author 参数的用户枚举攻击
if ($args ~* "author=d+") {
return 403;
}
# 2. 屏蔽 REST API 的用户列表接口
location = /wp-json/wp/v2/users {
return 403;
}
# 如果你想屏蔽更广范围的 user 相关接口
# location ~* ^/wp-json/wp/v2/users/ {
# return 403;
# }
# ================== 新增安全规则 结束 ==================
# ... 其他配置,如 root, index, if ($host = ...), location / 等 ...
}
3.保存文件并平滑重载 Nginx:
docker compose exec nginx nginx -s reload
修改用户昵称
WordPress 在文章作者处显示的可能默认是你的用户名。
1. 左侧菜单 -> 用户 -> 个人资料。
2. 找到“昵称(必填)”字段,输入一个你想公开展示的名字(比如 “站长”、“anjir” 或者任何笔名)。
3. 在下面的“公开显示为”下拉菜单中,务必选择你刚刚设置的那个昵称。
4. 点击“更新个人资料”。
这样,你网站前台所有显示作者的地方,都将是你的昵称,而不是你那保密的登录用户名。
如何修改已经暴露了的WordPress管理员用户名?
直接通过数据库修改用户名
-
进入数据库容器:
docker exec -it wordpress_db mysql -u root -p
-
使用 WordPress 数据库:
USE wordpress;
-
查询管理员账号:
SELECT ID, user_login FROM wp_users;
super7cat_admin_xyz
:UPDATE wp_users SET user_login = 'super7cat_admin_xyz' WHERE ID = 1;
-
退出:
EXIT;