最近网站被恶意搜索攻击,收到腾讯云的内容违规通知,内容如下:
这种恶意搜索攻击,其实非常简单,就是通过既定的网址结构不断对网站发起不良关键词搜索访问,比如 WordPress 的搜索网址结构为 域名/?s=搜索词,而且可能还会顺便将访问的地址推送到各大搜索引擎,加快这些恶意网址的收录。这样,你的网站就会沦为这些不法之徒传播不良信息的渠道,这对网站排名是非常不利的,甚至可能会直接被搜索引擎拉入黑名单。
解决方案如下:
1、禁止搜索引擎收录搜索结果页
搜索结果页一般我们都不推荐被收录,所以建议大家还是禁止收录。现在几乎所有搜索引擎都遵循 robots.txt 的规则,也就是我们可以通过 robots.txt 定义规则,阻止搜索引擎收录搜索结果页面。我们可以在网站根目录,创建一个 robots.txt 文件,填入下面的内容:
1 |
Disallow: /?s=* |
这样就禁止搜索引擎收录 WordPress 搜索结果页面。
2、在搜索结果为零时,跳转到首页
网上的做法都是直接禁用 WordPress 自带的搜索功能,只是其实这个自带的搜索功能还是蛮好用的,而且目前也没有对服务器造成很大的压力。我这边的想法是保留搜索功能,只是当搜索结果不存在的时候,自动跳转到首页。
目前测试到可行的办法是直接在主题的 functions.php 中增加如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php // 搜索文章内容,搜索结果为零时,跳转到首页 // 解决腾讯云通报内容违规问题 http://www.mobibrw.com/?s=违规词 add_action( 'template_redirect', 'redirect_empty_search_results' ); function redirect_empty_search_results() { global $wp_query; if ( is_search() && $wp_query->found_posts == 0 ) { wp_redirect( home_url() ); exit(); } } ?> |
曾经试过在主题的 content-none.php 中通过 wp_redirect 进行跳转,虽然可见内容不存在了,但是页面源代码中会出现搜索词标签,因此不可行。
测试代码:
1 |
$ curl "http://www.mobibrw.com/?s=违规词" | grep "违规词" |
也曾经测试过自定义 searchform.php ,也是存在上述问题。
自定义 404.php 是无效的。搜索关键词过滤又实在是太多了,还不如搜索不到结果就返回首页更简单。