对于ASP.NET C#应用程序,我们需要根据IP地址限制访问。实现这一目标的最佳方法是什么?
答案 0 :(得分:16)
一种方法是使用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请求管道中。
答案 1 :(得分:8)
以下是关于如何执行此操作的article from Microsoft。
按IP地址或域名设置文件夹安全性
Apache使用Allow和Deny指令来确定可以访问特定网站或文件夹的站点。但是,Apache提供自主访问控制;您必须拒绝所有站点并提供可以访问文件夹或允许所有站点的特定站点或IP地址列表,并仅拒绝您不希望访问的站点。例如,如果您使用以下指令,则拒绝所有客户端计算机访问,除非它们被识别为domain.com域的一部分:
拒绝所有
允许来自.domain.com
IIS的工作方式相同。除列出的客户外,所有客户都被明确拒绝或授予访问权限。
定义特定文件夹或网站的访问控制
如果要限制整个站点的访问权限,请从左窗格的不同服务站点列表中选择该站点。
如果您只想限制特定文件夹的访问权限,请点击您要控制的文件夹。
注意:如果您使用域名限制,则服务器必须为每个请求执行反向DNS查找,以检查主机的注册域名。 Microsoft建议您尽可能使用IP地址或网络范围。
答案 2 :(得分:8)
在IIS 7中,限制IP的最佳方法是使用配置文件。
全文:
http://boseca.blogspot.com/2010/12/programmatically-addremove-ip-security.html