0

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

我该如何做才能仅从浏览器或我输入登录密码的计算机访问该站点,而无法从我复制了 .ASPXAUTH cookie 的另一个浏览器访问?

在此先感谢,

4

2 回答 2

4

您不能使用表单身份验证来做到这一点。围绕表单身份验证的整个概念是它依赖于客户端上的 cookie 来跟踪经过身份验证的用户。这对您来说不应该是一个问题,因为所有主要网站都以这种方式工作 - 如果您有一个有效的 cookie,客户端浏览器就不再重要了。您甚至不需要使用浏览器。您可以编写一个控制台应用程序,向您的站点发送 HTTP 请求,并随该请求发送 cookie,用户仍将通过身份验证。

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

于 2012-10-03T12:43:28.567 回答
0

可以在 auth cookie 中包含用户代理和客户端 IP 地址的散列(有关如何执行此操作的一些信息,请参阅ASP.Net 在 Auth Cookie 中存储用户数据)。

当心移动浏览器和代理 - 漫游网络上的用户可以非常频繁地更改 IP 地址,并且代理将为多个用户提供一个 IP。也将两者混合在一起,就像我一样,用户可能会从家庭 Wi-Fi 迁移到移动网络,然后通过代理迁移到公司 Wi-Fi,并且您会经常让人们退出. 包含用户代理哈希还意味着安装操作系统或浏览器更新的客户端也可以将它们注销。

为什么不使用两个 cookie:一个是持久的,用于识别用户,另一个是仅会话的,用于跟踪用户是否在此次访问中登录?然后你做亚马逊做的事情——任何涉及金钱的事情都需要登录,或者更改/查看个人数据。当他们登录时,您也可以刷新 auth cookie。

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

于 2012-10-03T12:46:49.397 回答