除了一个特定的I.P之外,如何阻止所有传入的代理访问?

时间:2013-04-16 11:55:09

标签: regex .htaccess mod-rewrite proxy ip

我有一个易受攻击的页面,因此,为了减少匿名攻击,我在我在网上找到的 .htaccess 中使用了这段代码:

# BLOCK PROXY VISITS
<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{HTTP:VIA}                 !^$ [OR]
 RewriteCond %{HTTP:FORWARDED}           !^$ [OR]
 RewriteCond %{HTTP:USERAGENT_VIA}       !^$ [OR]
 RewriteCond %{HTTP:X_FORWARDED_FOR}     !^$ [OR]
 RewriteCond %{HTTP:PROXY_CONNECTION}    !^$ [OR]
 RewriteCond %{HTTP:XPROXY_CONNECTION}   !^$ [OR]
 RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} !^$ [OR]
 RewriteCond %{HTTP:HTTP_CLIENT_IP}      !^$
 RewriteRule .* - [F]
</IfModule>

我的问题是,一位广告客户在其公司内部使用代理,因此无法访问我的网页。我不知道正则表达式,即使我认为我可以在看到它时识别,就像“哦,看起来像一个正则表达式”。我认为上面的条件是正则表达式,但我没有知道改变它们的方式,只有来自这个特定静态IP的代理访问不被禁止。

如果可能,我该如何实现?提前谢谢!

修改如我所知,我在serverfault.com处提出了这个问题。请点击此链接了解更多信息。

1 个答案:

答案 0 :(得分:0)

如果此客户始终具有相同的特定IP,则可以使用RewriteCond %{REMOTE_ADDR}检测到此情况并停止进一步重写

RewriteEngine on

# new rule
RewriteCond %{REMOTE_ADDR} =1.2.3.4
RewriteRule ^ - [L]

# old proxy rule
RewriteCond %{HTTP:VIA}                 !^$ [OR]
...
...
RewriteCond %{HTTP:HTTP_CLIENT_IP}      !^$
RewriteRule .* - [F]

您必须将此规则放在开头,否则其他规则将拒绝该请求。第一条规则允许IP 1.2.3.4像以前一样查看您的网站和第二条规则块。所有其他客户都不受影响,可以像以前一样看到所有内容。