2

正如这篇文章所述,通过 PHP 阻止 IP非常容易。

但是,如何使用 IIS 在站点范围内执行此操作?

这是我的(大)警告:

  1. 我无权更改 php.ini。所以我不能使用 auto_prepend 功能。
  2. 我在带有 IIS 的 Windows 上,所以我不能使用 .htaccess。
  3. 我没有在所有脚本上调用的任何 PHP“页脚”。事实上,很多页面都是静态 HTML!

有什么方法可以使用 IIS 将 IP 列入白名单?

好消息是我有一个要列入白名单的静态 IP 列表,所以我不需要轻易更改它们。

4

2 回答 2

4

您可以将 IIS 中的 IP 地址列入白名单,这应该会给您想要的结果。

  • 在 IIS 6.0 中,右键单击您的网站并选择属性。
  • 转到目录安全选项卡。
  • 单击“IP 地址和域名限制”的编辑
  • 单击“拒绝访问”单选按钮。
  • 输入您希望允许的任何 IP 地址。
于 2009-06-25T17:22:16.673 回答
2

您可以使用像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”评估为非 127.0.0.1 的 IP 地址时,上述条件评估为真。这 ?!是一个零宽度的负前瞻,正则表达式末尾的 (.*) 用于捕获有时出现在该变量中的任何垃圾。条件后面的规则说,对于任何不是“redirected.htm”的 URL,将其映射到“redirected.htm”。这可以防止无休止的重写。(您还可以使用 [L] 修饰符标志来防止无休止的重写)。

此 RewriteCond+RewriteRule 将任何来自外部的请求重定向到 IIS 服务器。您可以对一组特定的白名单 IP 执行类似的操作。

IIRF 是用 C 编写的 ISAPI 过滤器,在哲学上类似于 mod_rewrite。它适用于 IIS5、6 或 7。您需要管理员权限才能设置它。您不需要“编程”,但有一个与 .htaccess 具有相似语法的 ini 文件(特别适用于 mod_rewrite 规则)。

IIRF 是免费和开源的。

于 2009-06-25T16:34:57.947 回答