防止多个客户端重复执行cookie或使用cookie

时间:2018-08-24 21:37:48

标签: c# asp.net asp.net-mvc security cookies

在ASP.NET MVC中,一次阻止多个客户端同时使用有效cookie的“最佳实践”是什么?

在这种情况下,我们将使用所有OWASP技巧。

  • 严格的HSTS:每页上使用HTTPS / SSL
  • 将Cookie列为仅HTTPS
  • 将饼干标记为安全
  • cookie的有效期限短
  • 还有一些代码可以防止跨站点请求伪造(XSRF)在页面之间更改值。

这非常好,可以防止用户更改 值,但这并不能阻止不良行为者盗窃整个cookie并在仍然有效的其他地方重复使用 strong>(“ Cookie重播”或“会话固定”,具体取决于您问的是谁)。据我所知,没有标准的.NET配置或样板可以阻止这种情况。

例如,用户A登录并且他们的身份验证cookie在t分钟内有效。该用户PC上的恶意软件会忽略cookie上的仅HTTP /安全设置,并且能够检索实际存储的cookie,并将其发送给我们的恶意角色。然后,恶意角色可以使用Cookie编辑工具将其添加到他们的浏览器中,并以用户A的身份连接到该站点,直到cookie过期或用户A退出(使会话无效)为止。

理想情况下,如果发现两个客户端同时使用了cookie,是否可以配置.NET以使会话无效?

相似的项目已审核:

哦,S.O。社区,我们知道您有多喜欢“重复项”。

外部修复建议:

  • This page建议在用户登录时在服务器端设置一个bool值。错误的-只会阻止不良行为者在目标用户注销后使用cookie。它并不能阻止坏演员与目标用户同时玩转。
  • This page on StackExchange采用相同的方法,设置会话值。它也遇到同样的问题。
  • 即使Troy Hunt's oft-cited OWASP top 10通用安全修复程序也可以帮助您保护Cookie,但没有演示防止同时使用有效Cookie的方法。

2 个答案:

答案 0 :(得分:1)

如果您的目标是

  

防止不良演员偷走整个Cookie并重新使用它   仍然有效的其他地方

那么答案是否定的。不可能。

您从http请求中获得的信息量大致如下:

  1. 用户的IP
  2. 标题(cookie,用户代理等)
  3. 请求正文
  4. 目标IP(服务器的IP)
  5. URL

由于手头上的信息量有限,实际上您无法区分使用相同Cookie +浏览器+ IP的两个用户。

这就像两个ppl在同一台打印机上打印相同的消息一样,您需要确定哪个消息是由谁打印的。

您能做的最好的事情是,每当用户想要执行任何敏感操作时都要求输入密码,并为其分配一个一次性令牌。 (不友好)

或者您可以通过仅在新IP与登录IP不匹配时才需要它来使其更加友好。 (由于移动用户的IP一直在变化,因此对移动用户不友好)

答案 1 :(得分:0)

  

理想情况下,如果发现两个客户端同时使用了cookie,是否可以配置.NET以使会话无效?

我不确定您是否知道这个问题有多歧义-特别是“同时”这一概念。 Cookie与每个对象的HTTP请求一起提交。如果加载页面,则cookie随该页面的请求,所有样式表,所有脚本以及所有图像一起发送。因此,您绝对肯定不希望阻止cookie“同时使用”。

我认为您可能对将Cookie绑定到特定客户端端点感兴趣,例如浏览器的可见IP地址。答案很简单:将IP地址嵌入cookie。假设您已使cookie防篡改,则服务器只需在验证cookie的同时对其进行检查即可。

  

例如,用户A登录并且他们的身份验证cookie持续了t分钟。该用户的PC上的恶意软件。...

句号。地球上没有安全机制可以在合法用户的计算机上防御恶意软件。当然,除了反恶意软件之外。