【发布时间】:2021-10-18 15:42:19
【问题描述】:
正如 here 所记录的,使用 asp.net 生成 csrf 令牌也会阻止响应被浏览器缓存。
为此请求生成一个 AntiforgeryTokenSet 并将 cookie 令牌存储在响应中。此操作还将“Cache-control”和“Pragma”标头设置为“no-cache”,将“X-Frame-Options”标头设置为“SAMEORIGIN”。
我最初认为做出此决定是为了防止用户使用浏览器的“返回”按钮提交“陈旧的”请求令牌。后来我注意到这可能不是原因,因为:
- asp.net 为整个会话保留相同的 cookie 令牌。
- asp.net 允许多次提交相同的请求令牌,只要 cookie 令牌不变。
那么,以我目前的理解,使用浏览器的后退按钮并提交一个缓存的html页面应该没有问题吧?
当浏览器页面包含 csrf 令牌时,禁用浏览器页面缓存的理由是什么?这是安全最佳做法吗?
编辑
正如@serpent5 正确指出的那样,标头Cache-Control: no-store 确保公共缓存不会缓存响应并将其提供给不同的用户。澄清一下,我更想知道启用浏览器缓存 (Cache-Control: private) 是否会对安全性产生负面影响。
【问题讨论】:
标签: asp.net-core security csrf