【问题标题】:Preventing cookie replay / cookie use by more than one client防止 cookie 重播/cookie 被多个客户端使用
【发布时间】:2019-01-31 09:09:26
【问题描述】:

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

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

  • 严格的 HSTS:每个页面都使用 HTTPS/SSL
  • Cookie 被列为仅限 HTTPS
  • Cookie 被标记为安全
  • Cookie 的有效期很短
  • 还有防止跨站点请求伪造 (XSRF) 逐页更改值的代码。

这一切都很好,可以防止用户更改值,但它并不能阻止不良行为者窃取整个 cookie 并在其他地方重新使用它仍然有效 strong>(“cookie 重放”或“会话固定”,取决于您询问的对象)。据我所知,没有标准的 .NET 配置或样板文件可以防止这种情况发生。

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

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

已审核的类似项目:

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

外部修复建议:

  • This page 建议在用户登录时设置一个 bool 值 server-side 。错误 - 这只会阻止不良行为者在预期用户注销后使用 cookie。它无法阻止不良行为者与目标用户同时四处闲逛。
  • This page on StackExchange 采用相同的方法,设置会话值。它也有同样的问题。
  • 即使是Troy Hunt's oft-cited OWASP top 10 常见的安全修复程序也可以帮助您保护 cookie,但没有展示防止同时使用有效 cookie 的方法。

【问题讨论】:

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


    【解决方案1】:

    如果你的目标是

    防止不良行为者窃取整个 cookie 并重新使用它 在其他地方仍然有效

    那么答案是否定的。没有办法。

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

    1. 用户的 IP
    2. 标头(cookie、用户代理等)
    3. 请求正文
    4. 目标 IP(您的服务器的 IP)
    5. 网址

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

    就好像两个人使用同一台打印机打印了同一条消息,而您的任务是弄清楚哪条消息是由谁打印的。

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

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

    【讨论】:

    • 谢谢,将此标记为答案。最好的缓解措施似乎是在敏感操作之前重新验证用户。另外,关于移动 IP 的一个要点。
    • “Steam”的工作方式必须使用类似的东西,并在检测到时进行 2factor auth。虽然使用 IP 作为主要区别点在移动设备上执行此操作是不可行的,但下一步将是基于位置的 IP(以及其他检查,同时但变得与登录页面一样复杂) - 也是开销用户可能太高了。此时您可能应该切换到应用程序,但显然取决于场景。所以我同意没有什么是开箱即用的,但是您可以使用额外的代码使其变得更难,但可能会以用户烦恼为代价。
    【解决方案2】:

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

    我不确定您是否知道这个问题有多模棱两可——特别是“同时”的概念。 Cookie 与每个对象的 HTTP 请求一起提交。如果您加载一个页面,cookie 将与对该页面的请求、其所有样式表、所有脚本和所有图像一起发送。因此,您当然绝对不想阻止“同时”使用 cookie。

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

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

    句号。地球上没有安全机制可以防止合法用户机器上的恶意软件,期间。当然,除了反恶意软件。

    【讨论】:

    • 对不起,如果那是模棱两可的,但我希望这个例子能澄清它:两个非常不同的客户端使用相同的 cookie,在 cookie 仍然有效期间。绑定到 IP 并不理想。而且我知道客户端计算机上的恶意软件是我无法控制的一个因素,但我希望尽可能地降低这种风险。仅当浏览器/javascript 实现尊重该设置时,安全 cookie 才能防篡改...
    • 尊重,OP,“非常不同”并不是一个明确的要求。如果机器被入侵,黑客无论如何都会拥有用户名和密码,并且不会打扰会话,并且在黑市上,凭据比临时 cookie 更有价值。您的要求没有开箱即用的支持是有原因的。我会专注于OWASP TOP 10
    猜你喜欢
    • 1970-01-01
    • 2014-11-15
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2013-03-04
    • 1970-01-01
    • 2018-07-20
    相关资源
    最近更新 更多