C# 通过IP地址限制访问的最佳方法?

C# 通过IP地址限制访问的最佳方法?,c#,.net,asp.net,security,C#,.net,Asp.net,Security,对于ASP.NET C应用程序,我们需要根据IP地址限制访问。实现这一点的最佳方法是什么?下面是一个关于如何做到这一点的示例 按IP地址或域名设置文件夹安全性 Apache使用Allow和Deny指令来确定可以访问特定网站或文件夹的站点。然而,Apache提供了自主访问控制;您必须拒绝所有站点并提供可访问文件夹的站点或IP地址的特定列表,或者允许所有站点并仅拒绝您不想访问的站点。例如,如果使用以下指令,所有客户端计算机都将被拒绝访问,除非它们被识别为domain.com域的一部分: 全盘否定 允

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

下面是一个关于如何做到这一点的示例

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

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

全盘否定 允许从.domain.com访问

IIS也是这样工作的。所有客户端都被明确拒绝或授予访问权限,但列出的客户端除外

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

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

如果要仅限制对特定文件夹的访问,请单击要控制的文件夹

右键单击网站或文件夹,然后单击属性。 单击目录安全面板。 如果要限制对一组特定站点的访问,但拒绝对所有其他站点的访问,请单击“拒绝访问”。 如果希望在默认情况下授予对所有客户端的访问权限,但不包括特定的客户端列表,请单击“授予访问权限”。 要更新除外列表中的主机或域列表,请单击“添加”。 要将一台计算机添加到列表中,请单击“单台计算机”,在相应的框中键入IP地址,然后单击“确定”。 要在特定地址范围内添加计算机范围,请单击“计算机组”,在相应框中键入网络的IP地址,键入要配置的网络范围的子网掩码,然后单击“确定”。 要按标识的域名添加计算机,请单击“域名”,然后在相应的框中键入域名。 单击属性,键入域名,然后单击确定。 单击确定,然后单击确定。 注意:如果使用域名限制,服务器必须对每个请求执行反向DNS查找,以检查主机的注册域名。Microsoft建议您尽可能使用IP地址或网络范围。

一种方法是使用IP地址

从链接中删除,以防它消失:

/// <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模块类后,需要将其注册到web.config文件的httpModules部分,如下所示:

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

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

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

全文:

如果您有一个小的静态地址列表要阻止或允许,那么这将非常简单。如果你需要一些程序性的东西,试试@Mitch Wheat的答案+1此方法还允许您添加ip范围,这也很好。我不会从domain.com添加allow all,因为这会导致对每个请求进行ip查找。我最好使用定义的IP范围。这是一种很好的方法,特别是如果您为允许的IP地址添加配置节处理程序,那么IP范围呢?您编写的web.config语法适用于IIS6/Cassini。对于IIS 7和更高版本,它应该在下面,而不是和。类似的问题有你想要的答案。。。