【问题标题】:ASP.NET MVC 3 Forms Authentication security riskASP.NET MVC 3 Forms 身份验证安全风险
【发布时间】:2012-09-24 09:24:05
【问题描述】:

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

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

提前致谢,Olexiy

【问题讨论】:

  • 这比某人访问已登录用户的计算机并通过其 Web 浏览器访问您的站点更具安全风险。如果他们有权获取 cookie,那么他们也可以访问 Web 浏览器并可以进入。在我看来,风险不在于复制 cookie。风险在于您在 cookie 上设置了如此长的过期时间。
  • 谢谢凯文。但是,例如,谷歌已经为 Gmail 实现了这一点。你知道他们是怎么做到的吗?
  • Google 对其所有应用程序和第三方应用程序都使用 OAuth 和 OpenID。您可以保持登录到 Google 帐户,但我尚未验证您不能复制 cookie。如果您无法从 Google 帐户复制 cookie,那么它们可能使用了 @Zoltan 建议的技术。但正如我和 Dimitrov 所说,复制 cookie 没有风险。
  • 感谢凯文的回答。

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


【解决方案1】:

可以将用户代理的哈希值和客户端的 IP 地址合并到身份验证 cookie 中(请参阅 ASP.Net Store User Data in Auth Cookie 了解有关如何进行此操作的一些信息)。

但是

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

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

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

【讨论】:

  • 感谢您的回答,安德拉斯。例如,谷歌已经为 Gmail 实现了这一点。你知道他们是怎么做到的吗? ——
【解决方案2】:

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

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

【讨论】:

  • 谢谢你的回答,达林。你知道我如何使用 ASP.NET MVC3 来做到这一点。也许使用自定义身份验证。
  • 您可以在表单身份验证 cookie 的用户数据部分中存储客户端 IP 地址、用户代理等组合的哈希值,并编写自定义授权属性,您可以在其中验证它们是否匹配。虽然这些标头可能是伪造的,但不是 100% 防布尔型解决方案。
  • 谢谢你的回答,达林。例如,谷歌已经为 Gmail 实现了这一点。你知道他们是怎么做到的吗?
  • @OlexiyKubliy,他们为 Gmail 实现了什么?如果你有有效的 cookie,你可以用它来伪造一个 HTTP 请求并且仍然被认证。
猜你喜欢
  • 1970-01-01
  • 2021-02-21
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 2017-02-23
相关资源
最近更新 更多