我的网站“受到攻击”:来自许多不同IP的漫游器正在填充垃圾内容的表单。
IP地址不能过滤,它们总是不同的,所以我想按照QUERY_STRING进行过滤,来匹配这样一个URI:
www.site.com/search?field1=spamword&field2=another_spamword
规则 :
rewritecond %{QUERY_STRING} ^(.*)spamword(.*)$ rewriterule .* - [F,L]
正则expression式看起来是正确的,但规则永远不会执行。 任何想法发生了什么?
谢谢。
我无法启用重写日志,所以我find了另外一种方法,直接在所有页面上使用表单来完成:
if ( strlen( $_SERVER['REQUEST_URI'] )>650 ) { header('HTTP/1.0 401 Unauthorized'); .. error message to not panic real users ... exit; }
因为我发现(注意访问日志并考虑表单域)超过650个字符的URL永远不是一个有效的请求。 (平均大小是4-6 Kb)
可悲的是正则expression式的问题仍然存在,并没有设法解决它。 但至less这个问题部分解决了(机器人仍在那里,但页面使用的资源非常less,因为没有查询完成)
幸运的是机器人会识别401错误并停止。
除了@Wrikken评论(检查日志,看看是否RewriteEngine ),唯一可能是错误的是正则expression式。 尝试删除():
RewriteCond %{QUERY_STRING} ^.*spamword.*$