【问题标题】:Can I whitelist IP's using IIS running a PHP site?我可以使用运行 PHP 站点的 IIS 将 IP 列入白名单吗?
【发布时间】:2010-11-05 21:41:26
【问题描述】:
正如本文所述,blocking IP's via PHP 非常简单。
但是,我如何在站点范围内使用 IIS 做到这一点?
这是我的(大)警告:
- 我无权更改 php.ini。所以我不能使用 auto_prepend 功能。
- 我在带有 IIS 的 Windows 上,因此无法使用 .htaccess。
- 我没有在所有脚本上调用的任何 PHP“页脚”。事实上,很多页面都是静态 HTML!
有什么方法可以使用 IIS 将 IP 列入白名单?
好消息是我有一个静态 IP 列表要列入白名单,所以我不需要轻易更改它们。
【问题讨论】:
标签:
php
iis
ip-address
whitelist
【解决方案1】:
您可以使用像 IIRF 这样的 URL 重写器来执行此操作。插入规则以返回 404 或任何您喜欢的来自不允许 IP 的请求。这适用于任何 Web 应用平台:PHP、Java、ASP.NET、RoR、静态 html 或图像,等等。
自述文件给出了一个这样的例子:
RewriteCond %{REMOTE_ADDR} ^(?!127.0.0.1)([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})(.*)$
RewriteRule ^/(?!redirected.htm)(.*)$ /redirected.htm
它说:
当服务器变量“REMOTE_ADDR”计算的 IP 地址不是 127.0.0.1 时,上述条件计算为真。这 ?!是一个零宽度的负前瞻,正则表达式末尾的 (.*) 用于捕获有时出现在该变量中的任何垃圾。条件后的规则说,对于任何不是“redirected.htm”的 URL,将其映射到“redirected.htm”。这可以防止无休止的重写。 (您还可以使用 [L] 修饰符标志来防止无休止的重写)。
此 RewriteCond+RewriteRule 将任何来自外部的请求重定向到 IIS 服务器。您可以对一组特定的白名单 IP 执行类似的操作。
IIRF 是用 C 编写的 ISAPI 过滤器,在哲学上类似于 mod_rewrite。它适用于 IIS5、6 或 7。您需要管理员权限才能设置它。您不需要“对其进行编程”,但有一个与 .htaccess 具有相似语法的 ini 文件(特别适用于 mod_rewrite 规则)。
IIRF 是免费和开源的。
【解决方案2】:
您可以在 IIS 中将 IP 地址列入白名单,这应该会给您想要的结果。
- 在 IIS 6.0 中,右键单击您的网站并选择属性。
- 转到目录安全选项卡。
- 点击“IP 地址和域名限制”的编辑
- 点击“拒绝访问”单选按钮。
- 输入您希望允许的任何 IP 地址。