惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
Vercel News
Vercel News
U
Unit 42
L
LangChain Blog
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
F
Fortinet All Blogs
小众软件
小众软件
I
InfoQ
P
Proofpoint News Feed
D
DataBreaches.Net
Martin Fowler
Martin Fowler
H
Help Net Security
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
B
Blog RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog

水拍石

《当代政治哲学》简单梳理 – 水拍石 未来与命运 – 水拍石 为你的发言付费 – 水拍石 wordpress评论增加邮箱验证与中文检测 – 水拍石 全球高利率及高主权债务下的经济压力 – 水拍石 股市横盘 – 水拍石 博客动静的选择 – 水拍石 休谟《人性论》导读手册 – 水拍石 《现代世界体系》简评 – 水拍石 能力天花板与命运 – 水拍石 博客与生活 – 水拍石 中国股市稳定调控核心机构梳理报告 – 水拍石 阿里财报AI相关数据及新闻报道的梳理 – 水拍石 美国债务简记 – 水拍石 信仰之爱与理性之爱 – 水拍石 出售了savouer.com域名 – 水拍石 分层 – 水拍石 大憨 – 水拍石 冠冕与王 – 水拍石 盲从 – 水拍石 新疆自驾游略记 – 水拍石 近日杂记之20260723 – 水拍石 AI的转变期终于来了 – 水拍石 错位 – 水拍石 癫狂 – 水拍石 第十章 超越主义之争:经济学与人类合作的未来 – 水拍石 第九章 算法、债务与新垄断:21世纪经济的新问题 – 水拍石 第八章 国家里面的市场:中国制内市场的历史逻辑 – 水拍石 第七章 资本主义的镜子:马克思主义的洞见与歧途 – 水拍石 第六章 交易为什么这么难:制度经济学与真实世界 – 水拍石
给wordpress增加Basic Auth密码 – 水拍石
水拍石 · 2026-06-08 · via 水拍石

3634 字 47 评论

目录

  • 一、主题中修复简单薄弱点
  • 二、增加额外的验证方式
  • 三、最强的方案

最近几天博客一直被无聊的人扫描,尝试后台登陆及找回管理员密码。尽管博客没有什么有价值的东西,被攻破了也没有多大的损失,但这种扫描行为本身让人比较恶心,于是就想着增强下博客的安全性。

大的思路其实就三条,增加阿里云ESA的WAF和回源保护、wordpress的薄弱点加固、及增加额外的验证方式。阿里云ESA就不多说了,因为这个产品用的人可能不多,每家CDN的设置差异较大。下面主要集中在wordpress的薄弱点加固和增加额外的验证方式两方面总结下这次的经验。

一、主题中修复简单薄弱点

修复项 严重度 说明
统一登录错误消息 严重 无论用户名是否存在,一律返回“登录信息不正确”,防止攻击者通过错误提示枚举用户名
移除密码找回功能 严重 移除密码找回功能,以防无聊的人不断点击
增加登陆失败锁定 严重 随着登陆失败次数的增加不断增加锁定IP时长
增加登陆验证码 严重 将简单算数验证码改为图片显示的算数验证码,以增加机器识别的难度(需要OCR,会增加成本)
移除 WP 版本号 登录页+前端所有 CSS/JS 的 ver= 参数全部移除
移除 REST API Link 头 HTTP 响应头不再暴露 wp-json 端点
删除 readme.html 和 license.txt 这两个文件会暴露 WordPress 版本号
RSS Feed 隐藏作者名 Feed 中作者显示为“作者”而非真实昵称
移除 body class 主题名 不再暴露 wp-theme-nickel
移除登录页语言切换器 减少攻击面

二、增加额外的验证方式

增加额外的验证方式有两个思路,一个是增加2FA,就是类似于增加一个和手机端同步的动态密码,或邮件发送的6位数动态密码,从而形成wordpress的账户密码和动态密码的双重验证。另一个思路是增加一个nginx的Basic Auth密码,原理就是在访问登录页等敏感页面时会弹出一个登陆页面,只有通过了这个登陆页面才能看到真正的登录页。我最终选择了Basic Auth方案,原因有三个,一是2FA较复杂,因此插件普遍较重,我不想让网站加载这么多东西;二是除了登录页外/wp-admin/目录也需要保护,而轻量的2FA没有这个功能;三是Basic Auth完全由nginx处理,系统损耗最轻,即是被爆破小鸡也容易扛住。如果大家比较倾向于2FA方案,那么我推荐wp 2FA插件。

Basic Auth部署完后弹出的验证框如下,下面我贴上完整的部署步骤。

1、在nginx的配置文件中增加以下代码

记得要加在include enable-php-83.conf 之前,原因是正则 location 之间,先定义的优先。如果 enable-php-83.conf 中的 location ~ \.php$ 在前面,它就会抢先匹配 /wp-admin/index.php,auth_basic 就被绕过了。所以必须把 location ~ ^/wp-admin/.*\.php 放在它前面。

需要添加的代码如下:

============= ★ 新增:Basic Auth 保护 wp-admin 和 wp-login =============

# 1) 登录页加密(精确匹配,优先级最高,不被任何正则覆盖)

location = /wp-login.php {

auth_basic “Restricted”;

auth_basic_user_file /www/server/nginx/htpasswd/wp-auth;

try_files $uri =404;

fastcgi_pass unix:/tmp/php-cgi-83.sock;

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

# 2) wp-admin 下 PHP 文件加密(正则,必须在 enable-php-83 之前定义)

location ~ ^/wp-admin/.*\.php(/|$) {

auth_basic “Restricted”;

auth_basic_user_file /www/server/nginx/htpasswd/wp-auth;

try_files $uri =404;

fastcgi_pass unix:/tmp/php-cgi-83.sock;

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

# 3) 放行 admin-ajax.php(精确匹配,优先级高于上面的正则)

location = /wp-admin/admin-ajax.php {

auth_basic off;

try_files $uri =404;

fastcgi_pass unix:/tmp/php-cgi-83.sock;

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

# ============= ★ Basic Auth 结束 =============

2、创建密码目录

mkdir -p /www/server/nginx/htpasswd

3、安装 htpasswd 工具

# CentOS / AlmaLinux / Rocky
yum install -y httpd-tools

# Ubuntu / Debian
apt install -y apache2-utils

4、创建密码文件和用户

# -c 表示创建新文件(首次使用)
# 替换 admin 为你想要的用户名
htpasswd -c /www/server/nginx/htpasswd/wp-auth admin

系统会提示输入两次密码:

New password: ********
Re-type new password: ********
Adding password for user admin

5、如果要添加第二个用户(可选)

# 注意:不要加 -c,否则会覆盖已有用户
htpasswd /www/server/nginx/htpasswd/wp-auth user2

6、验证密码文件

cat /www/server/nginx/htpasswd/wp-auth

应该看到类似输出(用户名:加密密码):

admin:$apr1$Xk7Zb2Qw$LmN3R4h5K6j7P8qRs9TtU0

7、设置文件权限

chown www:www /www/server/nginx/htpasswd/wp-auth
chmod 640 /www/server/nginx/htpasswd/wp-auth

8、检查 Nginx 语法并重载

nginx -t

看到 syntax is oktest is successful 后:

nginx -s reload

三、最强的方案

CDN端WAF+CDN源站保护(只有CDN节点能回源)+CDN端机器人拦截+网站加固+2FA+Basic Auth(作为简单替代,如果有固定IP的话,可以只允许自己的IP访问敏感页面)。但设置的规则越多,对于小站来说越麻烦,平时容易出错,搬迁时耗费的精力更多,所以如果没有被骚扰,那么CDN端WAF是最好的选择。

一直没有用过静态博客,是不是如果用了静态博客就没有了这些烦恼?

作为个人博客原本不用这么折腾的,但无奈蛋疼的人太多,总干这种损人不利己的事情,逼迫着不懂一点点技术的我也不得不花时间来学习这些网站维护知识。