使用https时表单身份验证会话cookie劫持

时间:2014-05-19 16:25:12

标签: asp.net security forms-authentication

更新

我有一个ASP.NET网站,它始终为所有页面使用SSL。

我的问题是,是否有可能(实际上)某人执行表单身份验证会话cookie劫持,其中表单cookie ID被泄露,并且目标用户的会话被使用受损的cookie ID劫持。

2 个答案:

答案 0 :(得分:3)

  1. SSL是关于加密;这不是要阻止访问通过网络传输的信息。换句话说,同一网络上的任何人都可以检查服务器和客户端之间的每个数据包。 SSL所做的唯一事情是对这些数据包中的数据进行加密,因此它不能以纯文本形式查看。

  2. SSL很棒,但它不是万无一失的。除非你过去几个月一直生活在岩石下,否则你无疑会听到Heartbleed的错误。它特别讨厌因为它允许恶意用户获取SSL连接的加密密钥,因此,能够解密已发送的数据包。然而,即使在bug之前,这个机制仍然是一个重要的考虑因素。您的SSL流量仅与证书的私钥一样安全。如果私钥被泄露,或者您允许它以某种方式泄漏,那么您实际上没有安全性。

  3. Cookie只是属于通过SSL连接加密的所有数据的更广泛类别的数据。它们的不同之处在于它们存储在客户端上,未加密。如果您允许通过非安全连接(HTTP)发送cookie,则数据可能会在这种情况下泄漏。但是,如果在cookie上设置Secure标志,则(在支持的客户端中),如果连接是HTTPS,则只会将其发送回服务器。始终建议您使用通过HTTPS发起的任何Cookie发送此标记。然而,重要的是要意识到,cookie的弱点始终是客户端。如果客户端遭到入侵,则存储的cookie中的任何数据也会受到损害。但是,这可能导致的灾难程度在很大程度上可以通过永远在cookie中发送任何敏感内容来减轻,例如用户名和密码之类的东西显然是个坏主意。

  4. Cookie受域限制。这意味着不只是任何人都可以要求他们;它必须是最初设置cookie的域。然后,这会留下两个妥协点:服务器本身和客户端计算机上。如果您的服务器遭到入侵,那么暴露的cookie是您最不关心的问题。如果客户的机器受到损害,那么无论如何都不受控制。这里最好的缓解因素是循环会话,假设正确地说,cookie中唯一出现的是会话ID。换句话说,用户的会话应该在一段合理的时间内超时。由于恶意用户必须在新鲜时抓住客户端的cookie,或者被窃取的数据无用,否则这就使得妥协变得更加困难。

答案 1 :(得分:0)

是的,这在技术上是可行的,但通过适当的保护措施,发生这种情况的风险非常小。要检查的关键点是:

  • 强制执行SSL
  • 使用已建立的框架或商业产品(ASP.NET表单auth,SiteMinder等)
  • 禁用身份验证Cookie持久性(即“记住我”或“保存我的凭据”功能)
  • 启用CSRF检查(详情请见here
  • 再多here

Cookie几乎是在浏览器中维护身份验证会话的行业标准。如果你不使用它们,你也可以放弃发布公共站点的想法。