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

3

我希望我的网站应用程序只能从精确的IP地址范围访问。

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


2
这个功能已经内置于IIS中,重新发明轮子的原因是什么? - Damien_The_Unbeliever
在 AZURE 网站中,您无法对 IIS 进行任何更改。它不是服务器,而更类似于从控制面板管理的共享托管。所以我不是在重复造轮子。只是分享我的解决方案。 - RASKOLNIKOV
2个回答

2

иҜ·еңЁеҲҶдә«2013е№ҙй“ҫжҺҘд№ӢеүҚйҳ…иҜ»жүҖжңүиҜ„и®әгҖӮеҸҜиғҪеҪ“ж—¶AZUREзҪ‘з«ҷдҪҝз”Ёзҡ„жҳҜIIS 7.5иҖҢдёҚжҳҜ8гҖӮжҲ‘е°қиҜ•дәҶжӮЁеҲҶдә«зҡ„зӣёеҗҢж–№жі•пјҢеңЁIIS 8дёӯж— жі•е·ҘдҪңгҖӮиҝҷе°ұжҳҜдёәд»Җд№ҲжҲ‘еҲҶдә«иҝҷдёӘи§ЈеҶіж–№жЎҲпјҢд№ҹи®ёжңүдәәжӯЈеңЁеҜ»жүҫеҸҜиЎҢзҡ„и§ЈеҶіж–№жЎҲгҖӮеҸҰеӨ–пјҢжҲ‘д»ҺжңӘиҜҙиҝҮиҝҷжҳҜе”ҜдёҖе’ҢжңҖеҘҪзҡ„и§ЈеҶіж–№жЎҲгҖӮе®ғеҸӘжҳҜдёҖдёӘи§ЈеҶіж–№жЎҲгҖӮ - RASKOLNIKOV
1
@RASKOLNIKOV,我知道你的评论,是的,这确实有效。不确定你的情况,但我个人已经多次使用了这个功能,并且可以说它确实有效。编写用于限制客户端IP的代码并不是一个好主意,因为客户端已经进入您的应用程序。通过在配置文件服务器/IIS 8中进行IP限制,系统会自动为您处理此问题。 - Rick Rainey
1
尝试按照描述的方式基于IP地址或域名进行访问限制。目前在Azure中无法正常工作。尝试限制Azure Web应用程序,使它们只能相互访问。 - syr

0

那么我们如何将这些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>

Code behind的工作原理:

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"];
}

2
最好将这个逻辑从页面逻辑中移出,并放到全局应用程序类(global.asax)的其中一个函数中,因为这个逻辑与页面无关。 - mason
2
最好让IIS为您完成这个任务。 - John Saunders
我们正在谈论Azure网站。您没有机会在IIS设置中进行任何操作。 - RASKOLNIKOV
1
我曾经也这样想过 - https://blogs.msdn.microsoft.com/benjaminperkins/2016/03/02/how-to-setup-ip-security-restrictions-for-an-azure-app-service/ - Cyrus Downey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接