前面写了一篇《大家做网站有遇到这种情况吗?恶意搜索词攻击》,内容太过复杂了,一直没有测试成功。

今天找到了一个相对简单的解决方法:

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 的请求访问您的网站,包括首页和其他页面。

第二个方法我还没有试。