在哪里存储 CSRF 令牌 - ViewState 或 Session?
Where to store CSRF token - ViewState or Session?
我一直在研究 CSRF 漏洞以及如何在 .NET 应用程序中修复它。
根据我的研究,这里是我需要做的伪算法:
- 检查请求 cookie 中的 CSRF 令牌请求,如果不存在,则创建一个
在服务器上。
- 创建令牌后,将令牌添加到
响应 cookie 发送回客户端。客户端发送此 CSRF
所有未来请求 cookie 的令牌。
- 当服务器收到一个请求并且它
看到 CSRF cookie,服务器根据其存储的 CSRF 进行验证
令牌值。
- 匹配时,一切照常,如果值
不匹配则停止请求。
我的问题在第 3 步,我正在使用 ASP .NET 网络表单;我可以将此 CSRF 令牌存储在 Session 或 ViewState 中。
我不想使用 ViewState,因为我们应用程序中的所有页面都必须支持 EnableViewState="true"。否则,每次 post-back 调用都会清除 ViewState 内容。
这种情况下可以使用Session吗?如果我使用 Session 而不是 ViewState,是否会影响修复?
所以您要使用 Synchronizer token pattern (STP) 技术,每个用户会话使用一个令牌。
使用 ASP .NET 会话存储来保存 CSRF 令牌没有问题,基于攻击者无法访问它的简单假设,这不会以任何方式损害您的解决方案。尽管如此,正如 , using cookies to send the CSRF token to the server is flawed, embed the token in an HTML form instead, or use the Cookie-to-header token 技术中所指出的那样。
也就是说,我建议您看一下 AntiForgery Class,它具有内置的令牌生成、HTML 嵌入和验证方法。在安全方面,实施您自己的解决方案绝不是一个好主意,而是寻求成熟的、可信赖的解决方案。
还要确保使用 HTTPS 以防止您的令牌在 Sniffing attack
中被劫持
我一直在研究 CSRF 漏洞以及如何在 .NET 应用程序中修复它。
根据我的研究,这里是我需要做的伪算法:
- 检查请求 cookie 中的 CSRF 令牌请求,如果不存在,则创建一个 在服务器上。
- 创建令牌后,将令牌添加到 响应 cookie 发送回客户端。客户端发送此 CSRF 所有未来请求 cookie 的令牌。
- 当服务器收到一个请求并且它 看到 CSRF cookie,服务器根据其存储的 CSRF 进行验证 令牌值。
- 匹配时,一切照常,如果值 不匹配则停止请求。
我的问题在第 3 步,我正在使用 ASP .NET 网络表单;我可以将此 CSRF 令牌存储在 Session 或 ViewState 中。
我不想使用 ViewState,因为我们应用程序中的所有页面都必须支持 EnableViewState="true"。否则,每次 post-back 调用都会清除 ViewState 内容。
这种情况下可以使用Session吗?如果我使用 Session 而不是 ViewState,是否会影响修复?
所以您要使用 Synchronizer token pattern (STP) 技术,每个用户会话使用一个令牌。
使用 ASP .NET 会话存储来保存 CSRF 令牌没有问题,基于攻击者无法访问它的简单假设,这不会以任何方式损害您的解决方案。尽管如此,正如
也就是说,我建议您看一下 AntiForgery Class,它具有内置的令牌生成、HTML 嵌入和验证方法。在安全方面,实施您自己的解决方案绝不是一个好主意,而是寻求成熟的、可信赖的解决方案。
还要确保使用 HTTPS 以防止您的令牌在 Sniffing attack
中被劫持