我有一个网站,我收到了很多垃圾评论。通过查看垃圾邮件来源的IP地址,他们主要来自不太可能有任何真人需要与我的英文网站进行互动的国家,因此我想阻止他们。如何阻止POST请求的IP,但不是GET?
这应该是非常直接的,但是如果来自这些国家的流量实际上可以查看我的内容,而不是访问评论,注册等形式,我希望它。所以我想要让他们发出GET方法请求,但不是POST方法请求。
理想情况下,我想在站点的.htaccess文件中执行此操作,而不是将其编码到为站点供电的PHP脚本中。经过一番搜索之后,我发现我认为正是我所需要的:。看起来我可以完全按照上面的描述:
# Block China, Russia etc. from POSTs and similar methods
<Limit POST PUT DELETE>
order deny,allow
deny from 210.5.214.128/29
deny from 210.89.69.160/28
# Hundreds more lines...
# My current IP (sample provided here, actual used in reality), to test
deny from 100.100.100.100
allow from all
</Limit>
# Allow anyone to do GETs and HEADs
<Limit GET HEAD>
order deny,allow
allow from all
</Limit>
但它没有达到预期的效果。我可以做GET请求(根据需要),但POST也仍然正常工作,我可能会期望403 Forbidden错误。
如果我不使用标签并将IP置于拒绝列表中,它确实成功阻止我访问该站点(包括GET和POST)。
任何人都可以告诉我,我需要改变什么?
'理想的情况下/可湿性粉剂管理员,我想在站点的.htaccess文件中执行此操作,而不是实际将其编码到PHP脚本中 - 为什么?后者更快,更容易维护。 – symcbean
对我来说,htaccess选项更容易维护,因为我的无用IP源以这种格式提供它们。为了在PHP级别达到所需的结果,我需要将它们硬编码为一个数组(有点麻烦,但可能),解析包含IP的上传文本文件(稍微慢一点),或者把它们放在一个数据库中并从那里得到它们(几乎可以肯定效率较低)。 另外,.htaccess选项允许我在整个站点上执行此操作,而无需在每个PHP脚本中都包含此函数。 – Jack
请执行一些基准测试,并记下运行时的内存使用情况。即使假定服务器重新启动不成问题,性能也会如此。 – symcbean