WordPress安全加固15条清单(2026实测有效)

王尘宇 网站建设 7

上个月我一个客户的WP站凌晨三点被挂马,首页变成了菲律宾菠菜广告页。谷歌当天就标记为恶意网站,Chrome打开直接红色警告屏,日流量从5000多跌到两位数。查日志发现攻击者就是通过一个半年没更新的插件进来的——那个插件4月份就爆了RCE漏洞,补丁出了三个月他一直没更新。

说实话,WP被黑这事2026年比前几年更离谱了。AI写的攻击脚本现在满GitHub都是,连不懂代码的人都能用Claude生成一个自动扫描WP漏洞的工具。Wordfence 2026年6月报告显示,插件漏洞利用尝试同比增长了240%,而且攻击自动化程度高到吓人——从扫描到入侵平均只要47秒。

下面这15条是我自己维护七八个站点这几年踩出来的安全清单。每一条都有具体命令或配置,别光收藏,挑几条今天就做。

1. 换个强壮的管理员用户名

还在用admin?那你等于把大门钥匙放门垫下面。2026年暴力破解工具第一波尝试的用户名就是admin、administrator、root、test这几个。

如果你已经用admin建站了,别直接在后台改——WP不支持。进phpMyAdmin或者用WP-CLI:

wp user update 1 --user_login=新用户名 --display_name=新显示名

如果还没建站,安装时就把用户名设成非admin。再加一条:别用域名当用户名,比如wangchenyu这样就太明显了。

2. 强密码+双因素认证(2FA)

密码至少要16位,包含大小写+数字+特殊符号。但我实话跟你说,密码再强,撞库和社工还是能破。必须上2FA。

推荐Wordfence Login Security插件(免费,跟Wordfence防火墙同一个开发商)。它支持TOTP(就是Google Authenticator那种6位动态码),还能用生物识别在手机上验证。打开之后设置→Login Security→启用,扫二维码就完事了。

还有一个2026年的新选择:Cloudflare Zero Trust的免费计划也支持给wp-login.php加一层身份认证,不需要装插件。登录Cloudflare Dashboard→Zero Trust→Applications→Add application,选Self-hosted,把wp-login.php路径配置进去,用GitHub或Google账号做身份源。连接拒绝在到达你服务器之前。

3. 限制登录尝试次数

这个跟第2条是组合拳。Wordfence自带这个功能:打开Wordfence→All Options→Brute Force Protection,把「登录失败次数上限」设成5,「封锁时间」设成30分钟。

如果你不想装Wordfence,也可以用纯nginx方案:

limit_req_zone $binary_remote_addr zone=wp_login:10m rate=3r/m;

然后在location块里:

limit_req zone=wp_login burst=5 nodelay;

这样同一个IP每分钟只能请求wp-login.php三次。

4. 修改数据库表前缀

默认是wp_,几乎所有SQL注入自动化工具第一步都是查wp_users表。改成随机6位字符,比如x7k3m2_。

如果是新站,安装时在wp-config.php里直接改:

$table_prefix = 'x7k3m2_';

如果已经在跑的站,用Brozzme DB Prefix插件帮你改——它会自动更新所有表名和引用。改之前一定先备份数据库。

5. 保护wp-config.php

这个文件里有数据库密码、盐键(salts)、表前缀,是整个站最敏感的配置文件。在nginx里加一条规则禁止直接访问:

location ~* /wp-config.php { deny all; }

另外把文件权限设成400或440:

chmod 400 wp-config.php

再进一步,把wp-config.php从网站根目录往上移一层。WP会自动去父目录找这个文件。

6. 禁用XML-RPC

XML-RPC是WP最古老的API接口之一,主要给远程发布和pingback用的。问题是它几乎没有速率限制,攻击者可以通过xmlrpc.php用一次请求尝试几百个密码组合。2026年xmlrpc.php仍然是第三大攻击目标(仅次于wp-login.php和插件漏洞)。

如果你不用Jetpack或WordPress手机App发布文章,直接禁掉:

location = /xmlrpc.php { deny all; }

或者用Disable XML-RPC插件,一行代码都不用写。

7. 隐藏WordPress版本号

WP默认会在页面head里输出meta generator标签,直接暴露版本号。攻击者扫描到旧版本就能精准利用已知漏洞。

在主题functions.php里加:

remove_action('wp_head', 'wp_generator');

如果你用的是nginx,再加一条安全头把版本信息从响应中抹掉:

server_tokens off;

8. 禁用文件编辑器

WP后台自带主题和插件编辑器,管理员可以直接编辑PHP文件。攻击者一旦拿到管理员权限,就能用它写入webshell。

在wp-config.php里加一行:

define('DISALLOW_FILE_EDIT', true);

同样建议加上禁用插件和主题的安装更新(如果你用Git部署的话):

define('DISALLOW_FILE_MODS', true);

9. 限制uploads目录的PHP执行

2026年有一种很常见的攻击路径:攻击者通过某个允许上传的插件或主题漏洞,把一个.php文件伪装成.jpg上传到uploads目录,然后直接访问执行。

在nginx配置里给uploads目录加一条规则:

location ~* /wp-content/uploads/.*.php$ { deny all; }

或者在uploads目录下放一个.htaccess文件(Apache):

<FilesMatch ".php$">deny from all</FilesMatch>

如果你用宝塔面板,在网站设置→配置文件里找到uploads对应的location块加上面那条nginx规则就行。

10. 设置正确的文件权限

太多站长把所有文件权限都设成777就完事了,这等于给攻击者送了写入权限。

标准安全权限方案:

目录统一755:find /path/to/wp -type d -exec chmod 755 {} \;

文件统一644:find /path/to/wp -type f -exec chmod 644 {} \;

然后单独把wp-config.php锁死:chmod 400 wp-config.php

uploads目录需要写入权限(775),因为WP要通过PHP上传图片。但最好把PHP的执行者设为文件所有者而非www-data用户,这样文件权限644就够了。

11. 上WAF(Web应用防火墙)

如果你用Cloudflare,免费计划就自带基础WAF。进Security→WAF→创建规则,把SQLi和XSS威胁分设成Block。

同时在服务器层面推荐Wordfence或NinjaFirewall。Wordfence的防火墙在2026年有个新的实时恶意IP黑名单功能(需要付费版),能从全球几百万个Wordfence安装点收集攻击数据,一个站被打了所有站同步封IP。

不喜欢装插件的话可以用ModSecurity+OWASP规则集,但这需要一定运维基础。

12. 自动更新+备份双保险

WP默认只自动更新小版本(比如6.7→6.7.1),大版本需要手动更新。在wp-config.php里打开全部自动更新:

define('WP_AUTO_UPDATE_CORE', true);

插件也开自动更新。但注意:自动更新可能导致不兼容,所以更新前必须有备份。

我目前用UpdraftPlus每天凌晨自动备份到远程存储(七牛云/阿里云OSS/Backblaze B2都行),保留最近7天的备份。别把备份存在同一台服务器上——攻击者经常顺手删备份。

13. 修改默认登录地址

默认/wp-admin和/wp-login.php是全球攻击流量最集中的两个URL。改成自定义路径能直接过滤掉90%以上的自动化攻击。

用WPS Hide Login插件,把登录地址改成比如/my-secret-panel或者一个你容易记但别人猜不到的路径。注意不要跟别的插件slug冲突。

改完后记得加一条nginx规则把/wp-admin重定向到404,不然攻击者还是能扫到你用了WP:

location ~* /wp-admin$ { return 404; }

14. 监控文件完整性+异常活动

Wordfence自带文件完整性扫描,它会对比WP官方仓库里的核心文件哈希值和当前文件,发现被篡改就报警。建议设置每天凌晨自动扫描一次。

另外推荐WP Activity Log插件,记录每一次登录、插件激活、用户创建、文件修改等操作。被黑之后这是最宝贵的线索来源。

2026年新出的Solid Security(就是以前的iThemes Security改名换架构后的版本)也把文件变更检测做进了免费版,比Wordfence的这个功能轻量不少。

15. 禁用不需要的REST API端点

WP REST API默认暴露用户名列表(访问/wp-json/wp/v2/users就能看到所有作者的用户名),相当于把一半登录凭据送给了攻击者。

在functions.php里加:

add_filter('rest_endpoints', function($endpoints) { if (isset($endpoints['/wp/v2/users'])) { unset($endpoints['/wp/v2/users']); } return $endpoints; });

更彻底的办法是用Disable REST API插件,只保留自己需要的端点。

如果只能做5条,先做这些

时间有限的话按这个优先级来:

第一优先级(今天必须做):第1条(改admin用户名)+第2条(强密码+2FA)+第3条(限制登录尝试)。这三条组合拳能挡住95%的暴力破解攻击。

第二优先级(本周内做完):第11条(WAF)+第12条(自动更新+备份)。WAF堵漏洞,备份兜底。

剩下10条做了加分,不做也不是天会塌。但前5条是底线。

最后说一句:安全这事没有一劳永逸,你今天加固完,明天可能就有新的0day出来。养成每周登录后台看一眼更新通知、每月查一次Wordfence扫描报告的习惯,比任何清单都管用。

标签: WordPress安全 WordPress加固 网站安全防护 WP防黑

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~