WordPress-5.2.2(Nginx-1.14.0)如何阻止恶意GET请求及垃圾URL索引
解决WordPress恶意GET请求与垃圾URL收录问题
嘿,针对你遇到的这个问题——清理恶意软件后仍有带奇怪参数的垃圾请求,部分返回200(软404指向首页),还被搜索引擎收录,咱们分几个层面来解决:
一、先从Nginx下手,拦截恶意请求源头
看你的日志,这些垃圾请求的query参数都带有斜杠(比如%2F)或者是「字符串-数字/xxx」「字符串/数字/xxx」的模式,直接在Nginx配置里加规则拦截:
- 添加全局拦截规则,匹配这类可疑参数的请求直接返回403:
server { # 保留你原有的配置... # 拦截query参数里带斜杠的请求 if ($args ~* "/") { return 403; } # 更精准匹配日志里的恶意参数模式 if ($args ~* "^[a-z]+-\d+\/|^[a-z]+\/\d+\/") { return 403; } }
改完配置后记得先跑
sudo nginx -t检查有没有语法错误,没问题再执行sudo systemctl reload nginx让配置生效。
- 修复软404问题:WordPress默认没匹配到页面时会跳首页返回200,这会让搜索引擎误以为这些垃圾URL是有效页面。咱们在主题的
functions.php里加一段代码,让带恶意参数的请求正确返回404:
add_action('template_redirect', function() { foreach ($_GET as $key => $value) { // 检查参数里是否有斜杠,或者匹配日志里的恶意参数格式 if (strpos($value, '/') !== false || preg_match('/^[a-z]+-\d+|^[a-z]+\/\d+/', $key . $value)) { status_header(404); get_template_part(404); exit; } } });
二、处理已经被谷歌收录的垃圾URL
这些垃圾URL已经被收录,得明确告诉搜索引擎它们是无效的:
- 用Google Search Console提交删除请求:登录你的站点控制台,找到「移除」工具,把这些垃圾URL批量提交删除,最快几天内就能从搜索结果里消失。
- 返回410状态码强化信号:比404更明确的是返回410(资源永久移除),可以在Nginx里加规则:
# 批量匹配这类垃圾URL返回410 location ~* \?[a-z]+-\d+\/|\/\?[a-z]+\/\d+\/ { return 410; }
- 更新站点地图:用SEO插件(比如Yoast、Rank Math)生成只包含有效页面的站点地图,提交给Google Search Console,引导搜索引擎重新抓取你的正常内容。
三、加固站点,防止再次出问题
- 尽快升级WordPress版本:你用的5.2.2是很老的版本了,赶紧更到最新稳定版,修复已知的安全漏洞。
- 锁死xmlrpc.php:既然疑似xmlrpc攻击,直接在Nginx里禁用它:
location = /xmlrpc.php { deny all; return 403; }
要是你用Jetpack这类依赖xmlrpc的插件,就改成只允许Jetpack的官方IP访问。
- 保持安全插件活跃:Wordfence要一直开着,定期更新规则,开启实时扫描,给所有用户设置强密码,启用两步验证。
- 定期检查访问日志:每周抽点时间看看Nginx访问日志,发现新的恶意请求模式就及时添加拦截规则。
这样一套操作下来,既能拦住新的恶意请求,修复软404的SEO问题,又能清理已收录的垃圾URL,还能把站点的安全等级提上去。
内容的提问来源于stack exchange,提问作者chandesh .S
相关产品推荐
相关产品推荐

