我想知道通过 htaccess allow 或 PHP ips 数组来检查每个页面是否允许访问会员区域会更有效。我主要对性能感兴趣。
当您处理数百甚至数千个 ip 时,是否推荐使用这些方法中的任何一种?
有没有更好的办法?
更新:
如果我嗅探 IP,然后根据 IP 是否被识别,我会启动会员或无会员会话,这样就不必在每次浏览量时检查 ip 怎么办?
我想知道通过 htaccess allow 或 PHP ips 数组来检查每个页面是否允许访问会员区域会更有效。我主要对性能感兴趣。
当您处理数百甚至数千个 ip 时,是否推荐使用这些方法中的任何一种?
有没有更好的办法?
更新:
如果我嗅探 IP,然后根据 IP 是否被识别,我会启动会员或无会员会话,这样就不必在每次浏览量时检查 ip 怎么办?
使用 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 文件中,就是这样。简单的。
你可以使用 .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
如果您要处理超过一百个 IP 地址,特别是动态 IP,当然允许访问的最佳方式是通过 PHP 脚本,例如这样!请记住,此代码只是一个示例,并未完全审查:
while($row = mysqli_fetch_array($result)) {
if ($_SERVER['SERVER_ADDR'] != $row['ip']) {
header('HTTP/1.0 403 Forbidden');
break;
}
}
观众可以做剩下的事情来修复上面的语法,这就是它在社区 wiki中的原因。
对我来说,服务器端脚本语言有很多优点。这样,您甚至可以对应用程序进行编程以自动阻止发送垃圾邮件的用户的 IP 地址,您甚至可以对他们被阻止的时间进行编程。