通过IP地址控制访问Asp.net页面

时间:2014-10-08 08:54:41

标签: asp.net security

是否可以在asp.net中创建允许访问具有已定义IPaddres的用户的页面?我的目标是添加一个页面" test" (没有链接到我的网站)我想定义一个规则,只有指定的IP地址才能获得访问权限。 我如何通过asp.net实现这个?

3 个答案:

答案 0 :(得分:1)

您可以尝试将页面放在单独的文件夹中并使用密码保护它,然后将密码提供给您的用户,以便他们可以访问该内容。您可以尽可能保护每个文件的密码。如果您的网站受密码保护或登录,这将有所帮助。

您还可以专门为该用户创建子域。

这些只是少数几个。我相信你会在SO上得到更好的建议!

答案 1 :(得分:0)

显然,如果您真正想要的是某个特定用户,那么还有很多其他可以说是更好的方式来授予对页面的访问权限。或" group"有权访问,但假设您真的希望访问控制基于IP,答案可能仍然取决于外围设备问题,例如您正在使用的Web服务器。例如,IIS有一些基于IP的安全功能,您可以查看。

假设您真的,确实想要检查IP并且想要在代码中执行此操作,您可以在当前HttpContext的请求中找到有关调用环境的信息,即context.Request.UserHostAddress

如果您想根据此信息拒绝来电,您应该尽早这样做。在HttpApplication.BeginRequest事件中,您可以检查调用是否针对相关页面,如果UserHostAddress不符合您的喜好,则拒绝该请求。

如果您希望在实际页面中进行此控件,请在某些早期页面事件中执行此操作。

要管理可接受的IP,而不是将其硬编码到您的检查代码中,我建议您使用ConfigurationSection或类似代码。您的检查代码可能类似于:

var authorizedIps =
    authorizedIpConfiguration.Split(',').Select(ipString => ipString.Trim()).ToList();

isValid = authorizedIps.Any()
    && authorizedIps.Contains(context.Request.UserHostAddress);

如果检查失败,您应该相应地更改响应,即至少将其状态代码设置为401(http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)。

NB:在实施安全功能时需要考虑很多事情,而一般建议可能会表现为"不要这样做" - 它很容易动摇。尝试使用经过充分验证的概念和标准实施"如果可能的话。以上示例本身不应被视为提供"安全"解决方案,因为通常有许多限制数据可以从您的解决方案泄漏的方式。

编辑:从您评论到nocturns2给出的答案,您似乎想要限制对本地计算机的访问?如果是这样,那么有一个更容易和更清洁的解决方案:只需检查Request.IsLocal属性。它仅对源自本地计算机的请求返回true,请参阅HttpRequest.IsLocal Property

(另外,在部署解决方案时,你应该确保这个"调试页面"完全没有发布。如果你正确安全地管理它,那么你甚至可能不需要访问检查如果你想在" live"环境中调试选项,你可能应该关注HttpContext.Current.Trace或其他一些日志记录功能。)

答案 2 :(得分:0)

您可以选择程序化解决方案。但是,我会使用IIS函数来阻止访问。更少的代码,更易于配置,无需开发/测试环境。

假设:您使用的是IIS,因为它是ASP.NET。但其他网络服务器应该有类似的解决方案。

您可以向目录添加IP限制(这意味着您必须将页面放在单独的目录中)。示例:http://www.therealtimeweb.com/index.cfm/2012/10/18/iis7-restrict-by-ip