ASP.NET中的IP地址和域限制

ASP.NET中的IP地址和域限制,asp.net,azure,web-config,azure-web-app-service,ip-restrictions,Asp.net,Azure,Web Config,Azure Web App Service,Ip Restrictions,我希望我的web应用程序只能从精确的IP范围访问 如果客户端IP不在保存在WEB.Config中的范围内,则应用程序必须拒绝我对页面的访问。那么我们如何将这些IP范围添加到WEB.Config <?xml version="1.0"?> <configuration> <appSettings> <add key="IP" value="31.171.126.0/255,31.171.127.0/255"/> </appSet

我希望我的web应用程序只能从精确的IP范围访问


如果客户端IP不在保存在WEB.Config中的范围内,则应用程序必须拒绝我对页面的访问。

那么我们如何将这些IP范围添加到WEB.Config

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="IP" value="31.171.126.0/255,31.171.127.0/255"/>
  </appSettings>
  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="true"/>
    <authentication mode="None"/>
  </system.web>
</configuration>

代码隐藏的工作原理:

protected void Page_Load(object sender, EventArgs e)
{
    var allowed = false;

    //Get IP ranges from Web.config
    // AS you see in web.config different IP ranges is seperated by comma

    var ip = ConfigurationManager.AppSettings["IP"];

    // Get Client Ip

    lblIp.Text = GetIpAddress().Split(':')[0];


    var clientIp = GetIpAddress();
    var list = ip.Split(',');


    //Do search inside IP ranges and see if client IP is inside IP ranges which is allowed to open web app. 
    foreach (var item in list)
    {
        var range = Convert.ToInt32(item.Split('/')[1].ToString(CultureInfo.InvariantCulture));

        for (var i=0; i <= range; i++)
        {

            var submaskip = item.Split('/')[0].Split('.')[0] + "." + item.Split('/')[0].Split('.')[1] + "." +
                            item.Split('/')[0].Split('.')[2] + "." + i;

            if (clientIp == submaskip)
            {
                allowed = true;
            }
        }

    }

    if (allowed == false)
    {
        Response.Redirect("Denied.aspx");
    }
}


// Get Client IP
protected string GetIpAddress()
{
    var context = System.Web.HttpContext.Current;
    var ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

    if (string.IsNullOrEmpty(ipAddress)) return context.Request.ServerVariables["REMOTE_ADDR"];
    var addresses = ipAddress.Split(',');
    return addresses.Length != 0 ? addresses[0] : context.Request.ServerVariables["REMOTE_ADDR"];
}
受保护的无效页面加载(对象发送方,事件参数e)
{
允许的var=false;
//从Web.config获取IP范围
//正如您在web.config中看到的,不同的IP范围用逗号分隔
var ip=ConfigurationManager.AppSettings[“ip”];
//获取客户端Ip
lblIp.Text=GetIpAddress().Split(“:”)[0];
var clientIp=GetIpAddress();
var list=ip.Split(',');
//在IP范围内搜索,查看客户端IP是否在允许打开web应用的IP范围内。
foreach(列表中的变量项)
{
var range=Convert.ToInt32(item.Split('/')[1].ToString(CultureInfo.InvariantCulture));
for(var i=0;iAzure Web Apps(以前的Azure网站)支持此功能已有一段时间了。它是IIS的一项功能,Azure Web Apps通过将ipSecurity元素添加到Web.config中使其可用。您无需编写任何代码即可执行此操作

以下是描述Azure Web应用程序功能的博客,以及如何将配置添加到Web.config的示例


最好将其从页面逻辑中移到全局应用程序类(Global.asax)的一个函数中因为逻辑与页面无关。让IIS为您做这件事可能更好。我们谈论的是azure网站。您没有机会在IIS设置中做任何事情。@RASKOLNIKOV我曾经这样认为-已经有内置的支持来做这件事。有什么理由在这里重新发明轮子吗?在azure网站中,您可以在IIS中不做任何更改。它不是服务器。它更类似于从面板管理的共享主机。因此,我没有重新发明轮子。只是共享了我的解决方案。请在共享2013年的链接之前阅读所有评论。可能当时在AZURE网站中,IIS是7.5。而不是8。我尝试了与您共享的相同的东西,在IIS 8中,它不是working。这就是为什么我分享这个解决方案的原因,可能有人也在搜索工作解决方案。而且我从来没有说过这是唯一的解决方案和最佳解决方案。这是唯一的解决方案。@RASKOLNIKOV,我知道这些评论,是的,这确实有效。我不确定你的情况,但我个人多次使用过这个功能,可以说是这样的确实有效。编写代码来限制客户端IP并不是一个好主意,因为客户端已经进入了您的应用程序。配置文件服务器/IIS 8中的IP限制将为您解决这一问题。已尝试基于所述的IP地址或域名进行访问限制。目前,它在Azure中不起作用。已尝试限制Azure web应用程序所以他们只能互相接触。