【问题标题】:How to block IPs for POST requests, but not GET?如何阻止 POST 请求的 IP,但不阻止 GET?
【发布时间】: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 脚本中包含此函数。
  • 去做一些基准测试,并注意运行时内存使用情况。即使假设服务器重启没有问题,性能也会。

标签: apache .htaccess


【解决方案1】:

像这样改变允许拒绝的顺序:

<Limit POST PUT DELETE>
order allow,deny
allow from all
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
</Limit> 

<Limit GET HEAD>
order deny,allow
allow from all
</Limit>

【讨论】:

    【解决方案2】:

    阻止后端目录,例如:/wp-admin 除了允许 IP(即使您有密码)

    <Limit POST PUT DELETE>
     order deny,allow
     deny from all
     #allow from localhost
     #allow from 127.0.0.1
     allow from xxx.xxx.xx.xx
    </Limit>
    
    # Allow anyone to do GETs and HEADs
    <Limit GET HEAD>
     order deny,allow
     allow from all
    </Limit>
    

    【讨论】:

    • 请用英文写,去掉Jack if you're still there。因为它可能对Jack以外的人有用。
    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2021-11-19
    • 2016-01-02
    相关资源
    最近更新 更多