【发布时间】: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.社区,我们知道您有多喜欢“重复”。
- Asp.net - Using SSL to prevent cookie replay attack:SSL 不会阻止 cookie 重放,只会在传输过程中被篡改。
- Prevent re-use of authentication cookie in ASP.NET:特定于用户注销后的cookie使用;在这里,当坏人有访问权限时,用户仍处于登录状态。
- ASP.NET cookie replay fix without storing auth-token in server?:具体要求不在服务器上存储令牌,我不会排除作为答案
外部修复建议:
-
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