对于一个ASP.NET C#应用程序,我们需要基于IP地址限制访问。如何最好地实现这一点?
一种方法是使用 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地址或域名设置文件夹安全性
Apache使用Allow和Deny指令来确定可以访问特定网站或文件夹的站点。然而,Apache提供自主访问控制;您必须拒绝所有站点并提供一个可以访问文件夹的站点或IP地址列表,或允许所有站点并仅拒绝那些您不想让其访问的站点。例如,如果您使用以下指令,则除非客户端计算机被识别为domain.com域的一部分,否则将拒绝所有客户端计算机的访问:
Deny from all
Allow from .domain.com
IIS也是同样的方式工作。所有客户端都会被明确地拒绝或授权访问,除了列出的那些。
为特定文件夹或网站定义访问控制
如果您要限制整个站点的访问权限,请从左窗格中提供的不同服务站点列表中选择网站。
如果您只想限制特定文件夹的访问权限,请单击要控制的文件夹。
注意: 如果您使用域名限制,服务器必须执行反向DNS查找来检查主机的注册域名。Microsoft建议您尽可能使用IP地址或网络范围。