0

我想知道通过 htaccess allow 或 PHP ips 数组来检查每个页面是否允许访问会员区域会更有效。我主要对性能感兴趣。

当您处理数百甚至数千个 ip 时,是否推荐使用这些方法中的任何一种?

有没有更好的办法?

更新:

如果我嗅探 IP,然后根据 IP 是否被识别,我会启动会员或无会员会话,这样就不必在每次浏览量时检查 ip 怎么办?

4

3 回答 3

2

使用 htaccess 可能更快,因为您不需要运行 php 处理程序来运行您的 php 脚本。我给出了一个类似的答案阻止使用RewriteMap. 您只需要其他方式,而不是拒绝来自这些 IP 的访问,而是授予访问权限:

RewriteMap allow_ips txt:/path/to/allow_ips.txt

RewriteCond ${allow_ips:%{REMOTE_ADDR}|0} =1
RewriteRule ^protected/path - [L]

RewriteRule ^protected/path - [L,F]

allow_ips .txt 文件的内容为:

12.34.56.78 1
11.22.33.44 1
etc.

RewriteMap定向的必须在 server 或 vhost config中。您可以从 htaccess 定义一个映射,尽管您可以在那里使用它。

如果您不能使用地图,那么您需要使用Allow. 在要保护的目录中的 htaccess 文件中:

Order Allow,Deny
Deny from all
Allow from 12.34.56.78
Allow from 11.22.33.44
...

有没有更好的办法?

最好的方法可能是通过 htpasswd 实现用户/密码。这是一个教程。然后你可以把这些Auth*东西放在你想要保护的目录中的一个 htaccess 文件中,就是这样。简单的。

于 2013-04-06T08:27:27.360 回答
0

你可以使用 .htaccess

<Files 403.shtml>
   order deny,allow
   deny from all
</Files>

allow from 142.4.98.37
allow from 193.105.210.217
allow from 142.4.98.35

//Allow those ip which you want
于 2013-04-06T08:34:05.853 回答
0

如果您要处理超过一百个 IP 地址,特别是动态 IP,当然允许访问的最佳方式是通过 PHP 脚本,例如这样!请记住,此代码只是一个示例,并未完全审查:

while($row = mysqli_fetch_array($result)) {
    if ($_SERVER['SERVER_ADDR'] != $row['ip']) {
        header('HTTP/1.0 403 Forbidden');
        break;
    }
}

观众可以做剩下的事情来修复上面的语法,这就是它在社区 wiki中的原因。

关于优势

对我来说,服务器端脚本语言有很多优点。这样,您甚至可以对应用程序进行编程以自动阻止发送垃圾邮件的用户的 IP 地址,您甚至可以对他们被阻止的时间进行编程。

于 2013-04-06T15:12:30.263 回答