【发布时间】:2017-01-16 07:07:21
【问题描述】:
我有一个网站,我收到了很多垃圾评论。查看垃圾邮件的来源 IP 地址,它们大多来自那些不太可能有真人愿意与我的英语网站互动的国家,因此我可以简单地阻止它们。
这应该很简单,但是如果来自这些国家/地区的流量实际上可以查看我的内容,而不是访问评论、注册等表格,我希望它。如此有效,我希望允许他们发出 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)。
谁能告诉我我需要改变什么?
【问题讨论】:
-
Ideally, I'd like to do this in the .htaccess file for the site rather than actually coding it into the PHP scripts- 为什么?后者更快更容易维护。 -
对我来说,htaccess 选项更容易维护,因为我不需要的 IP 的来源以这种格式提供它们。为了在 PHP 级别实现所需的结果,我需要将它们硬编码为数组(有点麻烦,但可能),解析包含 IP 的上传文本文件(我预计会慢一点),或者将它们放入数据库并从那里获取它们(几乎可以肯定效率较低)。此外,.htaccess 选项允许我在整个站点范围内执行此操作,而无需在每个 PHP 脚本中包含此函数。
-
去做一些基准测试,并注意运行时内存使用情况。即使假设服务器重启没有问题,性能也会。