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