防止Cookie重放/多客户端使用Cookie

5
什么是ASP.NET MVC中防止有效cookie同时被多个客户端使用的“最佳实践”?
在这种情况下,我们使用了所有OWASP技巧。
- 严格的HSTS:每个页面都使用HTTPS/SSL - 将Cookie标记为仅限HTTPS - Cookies被标记为安全 - Cookies具有短期过期时间 - 还有代码来防止跨站点请求伪造(XSRF)从一个页面更改值到另一个页面。
这些措施可以防止用户更改值,但不能防止恶意行为者在cookie仍然有效时窃取整个cookie并在其他地方重复使用它(称为“cookie回放”或“会话固定”,具体取决于问谁)。据我所知,没有标准的.NET配置或样板可以防止这种情况。
例如,用户A登录,其身份验证cookie有效时间为t分钟。用户计算机上的恶意软件忽略了cookie上的HTTP-only / secure设置,并能够检索实际存储的cookie并将其发送给我们的不良行为者。然后,不良行为者可以使用cookie编辑工具将其添加到其浏览器中,并作为用户A连接到该网站,直到cookie过期或用户A注销(使会话无效)。
理想情况下,.NET是否可以配置,以便如果发现cookie同时在两个客户端中使用,则会话将无效?
类似项目已经审核:社区,我们知道您有多喜欢“重复”。

外部修复建议:

  • 这个页面建议在用户登录时在服务器端设置bool值。这是错误的——那只能防止恶意用户在预期用户登出后使用cookie,对于恶意用户与预期用户同时访问则没有任何作用。
  • StackExchange上的这个页面采取了相同的方法,设置了一个会话值。它也面临着同样的问题。
  • 即使Troy Hunt经常引用的OWASP前10名常见安全修复措施可以帮助您保护Cookie,但并没有演示一种防止有效Cookie同时使用的方法。
2个回答

4
如果你的目标是防止恶意用户在cookie仍然有效的情况下窃取整个cookie并在其他地方重复使用它,那么答案是否定的。由于HTTP请求中获取的信息非常有限,基本上只包括以下几点内容:用户的IP地址、头部信息(cookie、用户代理等)、请求体、目的IP地址(您服务器的IP)和URL。因此,你无法区分使用相同cookie、浏览器和IP的两个用户。
这就好像两个人使用同一台打印机打印了相同的消息,而你的任务是找出哪个消息是由谁打印的一样。
最好的办法是每当用户想要执行任何敏感操作时都要求输入密码,并为其分配一个一次性令牌(不太友好)。或者,如果新的IP地址与登录IP地址不匹配,则只需要进行验证即可(对移动用户来说不太友好,因为他们的IP地址经常发生变化)。

谢谢,将其标记为答案。最好的缓解措施似乎是在敏感操作之前重新验证用户身份。此外,移动IP也是一个很好的观点。 - Synctrex
“Steam” 的工作方式必须使用类似的方法,并在检测到时进行双重身份验证。虽然在移动设备上执行此操作不可行,因为 IP 是主要差异点,但下一步将是基于位置的 IP(以及其他检查,同时变得像登录页面一样复杂)- 同时对用户的开销也可能太高。此时,您应该考虑切换到应用程序,但这显然取决于情况。所以我同意没有现成的解决方案,但您可以通过额外的代码使其更加困难,但可能会让用户感到烦恼。 - CooPzZ

-1
理想情况下,.NET是否可以配置,以便在同时从两个客户端使用cookie时使会话无效?
我不确定您是否意识到这个问题有多么模糊,特别是“同时”这个概念。Cookie随着每个对象的HTTP请求提交。如果您加载一个页面,则cookie将随该页面、所有样式表、所有脚本和所有图像的请求一起发送。因此,您绝对不希望防止cookie在“同时”使用。
我认为您可能对将cookie绑定到特定的客户端终端(例如浏览器的可见IP地址)感兴趣。答案很简单:将IP地址嵌入cookie中。假设您已经使cookie防篡改,服务器只需要在验证cookie的同时检查它即可。
例如,用户A登录,他们的身份验证cookie有效时间为t分钟。该用户计算机上的恶意软件...
停止。地球上没有任何安全机制可以保护合法用户计算机上的恶意软件,除了反恶意软件软件。

抱歉如果之前表述有歧义,但我希望这个例子能够澄清:两个非常不同的客户端在cookie仍然有效期内使用相同的cookie。绑定IP并不理想。我知道客户端机器上的恶意软件是我无法控制的因素,但我正在尽可能减轻这种风险。只有当浏览器/JavaScript实现尊重该设置时,安全cookie才是防篡改的。 - Synctrex
3
尊敬的OP,"非常不同"不是一个明确的要求。如果机器被攻击者入侵,黑客将拥有用户名和密码,而不会费心进行会话劫持,并且凭据在黑市上比临时cookie更有价值。有理由解释为什么没有针对您所要求的内容的开箱即用支持。我建议关注OWASP TOP 10 - John Wu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接