最近,我的网站受到了来自各种机器人的数千个 POST 请求的攻击。
我没有采取基于用户代理来阻止这些机器人的方法,而是决定找到一种方法来阻止所有发送的 POST 请求到我的网站并允许所有来自的 POST 请求之内我的网站。
我想到了以下几点:
RewriteEngine on
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_HOST} !.*mydomain.com.*
RewriteRule ^.* - [F,L]
但不知为何它不起作用。有什么想法吗?
谢谢!
答案1
如果你正在寻找在 POST 期间不是来自 mydomain.com 的人,那么你想要的不是%{HTTP_REFERER}
。HTTP_HOST%{HTTP_HOST}
是Host:来自 HTTP/1.1 请求的标头客户端所做的,如果机器人只是访问你的 IP 而不去查找你网站的主机名,这可能会很有用。有关使用示例,%{HTTP_REFERER}
请查看此论坛帖子关于“热链接”保护...从热链接保护示例中需要注意的一点是,您的 REFERER 检查应包括 URL 的整个起始部分,否则有人可能会注册“我的域名asdfjkl.com” 或者只是在他们的网站上建立一个页面“example.com/我的域名.html”,其中任何一个都符合您当前的状况。
但实际上,Referer: 字段很容易伪造,而且有许多人出于隐私原因禁用了 Referer,这样他们就无法再在您的网站上使用 POST 表单了。这或许是一道不错的第一道防线,但如果您的目标是保护表单免受垃圾邮件机器人的攻击,那么您就需要做更多的事情。
如果您尝试保护用 PHP 或其他可以使用会话的语言编写的表单,那么只需在加载空白表单时在会话中设置一个标志,然后在保存表单时删除该标志(如果未设置标志则拒绝表单)即可击败某些机器人。这将要求机器人获取会话 cookie,加载空白表单,然后最终保存表单,按此顺序进行。您将失去那些不信任您使用会话 cookie 的人,但您将获得保护,免受愚蠢机器人和提交表单并重新提交后意外点击重新加载的人的侵害。
答案2
我不是重写规则方面的专家,但退一步来说,确保你的 Apache 目录配置中没有
AllowOverride None
因为它将完全禁用你的.htaccess。