为什么不这个.htaccess文件工作?

最近,我的网站遭到来自各种机器人的数千个POST请求的攻击。

我决定find一种方法来阻止发送我的网站的所有POST请求,并允许来自我的网站的所有POST请求,而不是采取阻止这些机器人的方法。

我想出了以下几点:

重写引擎
 RewriteCond%{REQUEST_METHOD} POST
 RewriteCond%{HTTP_HOST}!。* mydomain.com。*
 RewriteRule ^。*  -  [F,L]

但由于某种原因,它不起作用。 有任何想法吗?

谢谢!

如果您在POST期间寻找不是来自mydomain.com的人,那么您想要的是%{HTTP_REFERER}而不是%{HTTP_HOST} 。 HTTP_HOST是来自客户端发出的HTTP / 1.1请求的主机:如果机器人只是打你的IP,而不打扰你的网站的主机名,这可能是有用的。 对于使用%{HTTP_REFERER}例子来看看这个关于“hotlinking”保护的论坛post …从盗链保护示例中要注意的一点是,您的REFERER检查应该包括URL的整个开始部分,否则有人可能注册“ mydomain.com asdfjkl.com”或者在他们的网站“example.com/mydomain.com .html”上设置一个页面,其中任何一个都可以匹配您目前的状况。

但实际上,Referer:字段很容易伪造,并且有许多人因为隐私原因禁用了Referer,他们将不能再在您的网站上使用POST表单。 这可能是一个很好的第一道防线,但是如果你的目标是保护表格免受垃圾邮件攻击,那么你就需要做更多的事情。

如果您试图保护用PHP或其他可以使用会话的语言编写的表单,只需在加载空白表单时在会话中设置一个标志,然后在表单保存时擦除标志(如果没有设置标志,则拒绝表格)。 这将要求机器人获得一个会话cookie,加载空白表单,然后按照这个顺序最后保存表单。 你会失去不信任你的人与会话cookie,但你会得到保护,愚蠢的机器人和人意外地提交表单重新提交后重新加载。

我不是重写规则方面的专家,但是回头一步 – 确保你的Apache目录conf没有

 AllowOverride None 

因为它会完全禁用你的.htaccess。