【问题标题】:Best way to restrict access by IP address?通过IP地址限制访问的最佳方法?
【发布时间】:2010-09-30 16:02:54
【问题描述】:

对于 ASP.NET C# 应用程序,我们需要根据 IP 地址限制访问。实现这一目标的最佳方法是什么?

【问题讨论】:

标签: c# .net asp.net security


【解决方案1】:

一种方法是使用HttpModule。

来自链接(以防它消失):

/// <summary>
/// HTTP module to restrict access by IP address
/// </summary>

public class SecurityHttpModule : IHttpModule
{
 public SecurityHttpModule() { }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(Application_BeginRequest);
    }

    private void Application_BeginRequest(object source, EventArgs e)
    {
        HttpContext context = ((HttpApplication)source).Context;
        string ipAddress = context.Request.UserHostAddress;
        if (!IsValidIpAddress(ipAddress))
        {
            context.Response.StatusCode = 403;  // (Forbidden)

        }
    }

    private bool IsValidIpAddress(string ipAddress)
    {
        return (ipAddress == "127.0.0.1");
    }

    public void Dispose() { /* clean up */ }
}

一旦构建了 HTTP Module 类,您需要在 web.config 文件的 httpModules 部分注册它,如下所示:

<configuration>
    <system.web>
        <httpModules>
            <add name="SecurityHttpModule" type="SecurityHttpModule"/>
        </httpModules>
    </system.web>
</configuration>

这会将模块添加到您的 Web 应用程序的 ASP.NET 请求管道中。

【讨论】:

  • 这是一个不错的方法,特别是如果您为允许的 IP 地址添加配置部分处理程序
  • ip 范围呢?
  • 您编写的 web.config 语法适用于 IIS6 / Cassini。对于 IIS 7 及更高版本,它应该位于 而不是 和 而不是 。
【解决方案2】:

这里是article from Microsoft,说明如何执行此操作。


通过 IP 地址或域名设置文件夹安全性

Apache 使用 Allow 和 Deny 指令来确定可以访问特定网站或文件夹的站点。但是,Apache 提供了自主访问控制;您必须拒绝所有站点并提供可以访问文件夹的站点或 IP 地址的特定列表,或者允许所有站点并仅拒绝您不想访问的那些站点。例如,如果您使用以下指令,则所有客户端计算机都将被拒绝访问,除非它们被识别为 domain.com 域的一部分:

拒绝所有人
允许来自 .domain.com

IIS 的工作方式相同。除列出的客户端外,所有客户端都被明确拒绝或授予访问权限。

为特定文件夹或站点定义访问控制

  • 以管理员身份登录到 Web 服务器计算机。
  • 单击开始,指向设置,然后单击控制面板。
  • 双击管理工具,然后双击 Internet 服务管理器。
  • 如果要限制对整个站点的访问,请从左侧窗格中不同服务站点的列表中选择网站。

  • 如果您只想限制对特定文件夹的访问,请单击您要控制的文件夹。

  • 右键单击网站或文件夹,然后单击属性。
  • 单击目录安全面板。
  • 如果您想限制对一组特定网站的访问但拒绝访问所有其他网站,请单击拒绝访问。
  • 如果您想默认授予所有客户端访问权限但排除特定客户端列表,请单击授予访问权限。
  • 要更新“除外”列表中的主机或域列表,请单击“添加”。
  • 要将单台计算机添加到列表中,请单击单台计算机,在相应的框中键入 IP 地址,然后单击确定。
  • 要在特定地址范围内添加一系列计算机,请单击计算机组,在相应的框中键入网络的 IP 地址,键入要配置的网络范围的子网掩码,然后单击确定。
  • 要按识别的域名添加计算机,请单击域名,然后在相应的框中键入域名。
  • 单击“属性”,键入域名,然后单击“确定”。
  • 单击“确定”,然后单击“确定”。

注意:如果您使用域名限制,服务器必须为每个请求执行反向 DNS 查找以检查主机的注册域名。 Microsoft 建议您尽可能使用 IP 地址或网络范围。

【讨论】:

  • 如果您有一小部分静态地址要阻止或允许,这将非常简单。如果您需要一些程序化的东西,请尝试@Mitch Wheat 的回答。 +1
  • 此方法还允许您添加 ip 范围,这也很好。
  • 我不会添加“允许来自 domain.com 的所有内容”,因为这会导致对每个请求进行 IP 查找。我最好使用定义的 IP 范围。
【解决方案3】:

在 IIS 7 中限制 IP 的最佳方法是使用配置文件。

全文:
http://boseca.blogspot.com/2010/12/programmatically-addremove-ip-security.html

【讨论】:

    猜你喜欢
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多