Ajax中的CSRF风险

时间:2013-01-03 15:18:19

标签: ajax symfony csrf

我正在使用Symfony2并使用CSRF令牌保护我的表单 我有一个基于 Ajax 调用的评论系统。如果用户想要编辑他的评论,这就是正在发生的事情:

  • 用户点击编辑按钮。
  • “新鲜”评论编辑表单通过ajax加载。
  • 用户通过ajax编辑并提交表单。
  • 已编辑的评论将作为回复发回。

是否通过ajax加载“新鲜”编辑表单存在安全隐患?

如果表单已经在加载的页面中并且无法通过ajax请求,则攻击者无法猜出CSRF令牌,但由于他可以请求表单,因此他可以获取令牌。
他不能......?

也许一个例子会让它更清晰:

Dave 是我网站(www.acme.com)中无辜的注册用户。
Dave 已登录我的网站,然后访问了www.evil.com。他不知道,但当他访问evil.com时,脚本被执行了 该脚本向www.acme.com/comments/123/edit发送了一个ajax请求,并获得了编辑表单作为响应 然后用它的恶意内容填写该表单并提交该表单(再次使用ajax)。

邪恶的邪恶计划会起作用吗?

1 个答案:

答案 0 :(得分:2)

据我所知,如果您的表单包含CSRF令牌字段,则没有风险。默认Symfony2 CSRF令牌取决于攻击者无法使用的会话(以及意图)。因此,当攻击者请求表单时,会使用攻击者(而非用户的)会话ID。