前面写了一篇《大家做网站有遇到这种情况吗?恶意搜索词攻击》,内容太过复杂了,一直没有测试成功。
今天找到了一个相对简单的解决方法:
1、通过修改“functions.php”文件
function block_search_by_wd_parameter() {
if (isset($_GET['wd'])) {
wp_redirect(home_url('/'));
exit;
}
}
add_action('template_redirect', 'block_search_by_wd_parameter');
这段代码中,block_search_by_wd_parameter
函数检查当前请求中是否存在 wd
参数。如果存在,它使用 wp_redirect()
函数将用户重定向到 WordPress 网站的首页,并使用 exit
函数终止当前脚本执行。
使用 add_action()
函数将 block_search_by_wd_parameter
函数添加到 template_redirect
钩子中。这将确保在 WordPress 载入任何模板之前,block_search_by_wd_parameter
函数将被调用,从而禁用查询参数为 wd
的访问。
这段代码添加后,使用“?wd”参数还是可以访问网站内容,但是会被跳转到网站首页。
下面这段代码,使用“?wd”参数访问网站,会被跳转到“404”页面
function redirect_search_by_wd_parameter() {
if (isset($_GET['wd'])) {
global $wp_query;
$wp_query->set_404();
status_header(404);
nocache_headers();
include(get_query_template('404'));
exit;
}
}
add_action('template_redirect', 'redirect_search_by_wd_parameter');
这段代码中,redirect_search_by_wd_parameter
函数检查当前请求中是否存在 wd
参数。如果存在,它使用 $wp_query->set_404()
函数将当前请求标记为 404,并使用 status_header()
函数设置 HTTP 状态码为 404。
接下来,它使用 nocache_headers()
函数发送适当的 HTTP 标头,以确保页面不会被缓存。最后,它使用 get_query_template('404')
函数获取 WordPress 404 模板的路径,并使用 include()
函数将其包含到当前页面中,以显示 404 页面内容。
下面是效果图
或者用这段代码
function block_wd_parameter_request() {
if (isset($_GET['wd'])) {
$query_str = htmlspecialchars($_SERVER['QUERY_STRING'], ENT_QUOTES);
if (strpos($query_str, '%20TG%EF%BC%9A@') !== false) {
status_header(403);
exit('403 Forbidden: Access to this resource on the server is denied.');
}
}
}
add_action('init', 'block_wd_parameter_request');
这段代码将在 WordPress 初始化时检查当前请求的查询参数,如果查询参数中包含 wd
,且以 %20TG%EF%BC%9A@
结尾,则返回 HTTP 403 Forbidden 响应。
%20TG%EF%BC%9A@
是经过 URL 编码的字符串,实际上表示的是一个空格(%20
)、一个中文冒号(%E5%86%92%E5%8F%B7
,UTF-8 编码下的 %EF%BC%9A
),以及一个 @
符号。它通常被用作垃圾邮件链接中的参数,例如在垃圾邮件中,您可能会看到类似于 https://www.example.com/?wd=viagra%20TG%EF%BC%9A@example.com
的链接,其中 viagra
是垃圾邮件广告的关键词,TG%EF%BC%9A
和 @example.com
是用于标识邮件发送者和跟踪链接的字符串。
由于这种类型的链接通常被用于欺诈和垃圾邮件攻击中,因此建议对这种类型的链接进行限制或禁止访问,以提高您的网站的安全性和稳定性。
2、在 Nginx 的配置文件中添加规则
location ~* ^(.*)[?&]wd=[^&]*(.*)$ {
return 403;
}
这个规则将匹配任何包含查询参数为 wd
的请求,并使用 return 403
返回 HTTP 403 Forbidden 响应,从而禁止访问该请求。
这个规则将禁止任何包含查询参数为 wd
的请求访问您的网站,包括首页和其他页面。
第二个方法我还没有试。
评论 (0)