ASP.NET MVC 3 Forms身份验证安全风险

时间:2012-10-03 12:39:45

标签: .net asp.net-mvc-3 c#-4.0 forms-authentication

我正在使用ASP.Net MVC3和IIS 7.0。在我的网站上,我已经通过https实现了表单身份验证(requireSSL =“true”)。我已为.ASPXAUTH cookie设置了一些到期日期(例如5天)。一切正常,但从一个浏览器成功登录后,我可以将cookie .ASPXAUTH复制(没有问题)到另一个浏览器或另一台计算机,并在没有登录名和密码的情况下进入我的网站。

我怎么能这样做,我只能从我输入登录密码的浏览器或计算机上访问该网站,并且无法从我复制.ASPXAUTH cookie的其他浏览器访问该网站?

提前致谢,Olexiy

2 个答案:

答案 0 :(得分:4)

您无法使用表单身份验证执行此操作。表单身份验证的整个概念是它依赖于客户端上的cookie来跟踪经过身份验证的用户。这不应该是您关注的问题,因为所有主要网站都以这种方式工作 - 如果您拥有有效的cookie,则客户端浏览器不再重要。您甚至不需要使用浏览器。您可以编写一个控制台应用程序,向您的站点发送HTTP请求,并根据此请求发送cookie,用户仍将进行身份验证。

你不应该担心的风险。您已经通过启用SSL完成了必要的操作,这意味着永远不会通过未加密的渠道发送此cookie。

答案 1 :(得分:0)

可以在auth cookie中加入用户代理的哈希值和客户端的IP地址(有关如何进行此操作的信息,请参阅ASP.Net Store User Data in Auth Cookie。)

<强>但是

注意移动浏览器和代理 - 漫游网络上的用户可以非常频繁地更改IP地址,并且代理将为多个用户提供单个IP。混合使用这两者,在哪里,像我一样,用户可能会从家庭Wi-Fi迁移到移动网络,然后再转移到带代理的公司Wi-Fi,你会让人们经常退出。合并用户代理哈希也意味着安装操作系统或浏览器更新的客户端也可以签署它们。

为什么不改为使用两个cookie:一个是持久性的,用于识别用户,另一个是仅限会话,用于跟踪用户是否已登录此访问?然后你会像亚马逊那样做 - 需要登录任何涉及金钱或更改/查看个人数据的内容。当他们登录时,您也可以刷新身份验证cookie。

这就是说 - 实际上,复制auth cookie的风险实际上是非常低的 - 特别是如果你的超时设置只有几天。如果有人遇到蠕虫/黑客/小偷可以访问他们的身份验证cookie的情况,那么他们已经遇到了更大的问题。