【发布时间】:2012-01-05 09:45:27
【问题描述】:
我正在构建一个使用大量 ajax 的应用程序。大多数反 CSRF 解决方案都围绕着将一些信息放入视图状态并在发布时处理该数据。但是,我无法访问 ajax 调用中的视图状态。
我计划生成一个 GUID 来在 cookie 和会话状态中插入一个令牌,使 cookie 在用户注销时过期,在每次请求时修改 cookie 令牌和会话状态,并使用 httpmodule 来完成这项工作在转到 Web 服务或页面方法之前,将会话中的内容与从客户端返回的内容进行比较。
这将使我的应用程序具有 CSRF 证明吗?
谢谢。
【问题讨论】:
-
没有。从阅读Cross-site Request Forgery 开始。 "如果 Bob 的银行将他的身份验证信息保存在 cookie 中,并且如果 cookie 没有过期,那么 Bob 的浏览器加载图像的尝试将使用他的 cookie 提交提款表单,从而授权未经 Bob 批准的交易。”问题是浏览器总是有“有效的cookie”。但是,GUID/nonce 可以通过其他方式传输......实际上就是它在视图状态中的内容。
-
@pst +1。 Cookies 是 CSRF 能够首先工作的原因......
-
@Thilo:好的,感谢您的澄清:)猜猜这个问题的意外目的是澄清和简化问题。
-
我会避免使用 GUID。它们不能保证是不可预测的。使用安全的 PRNG。
-
@CodeInChaos:好的,谢谢你的提示。