使用ajax进行codeigniter csrf保护错误

时间:2012-04-08 08:50:25

标签: ajax prototypejs codeigniter-2 csrf-protection

我有一个小问题,我无法解决,这篇文章通过但响应返回“500内部服务器错误”

谁来解决它?

在CI论坛搜索后,我发现这个链接codeigniter-csrf-protection-with-ajax但是我无法解决它。任何人帮助我吗?

1 个答案:

答案 0 :(得分:4)

您应该在AJAX POST请求中包含csrf键以使操作起作用。

但是,您只是获取数据,因此使用method:'get'代替method:'post'应该可以解决问题并使您的请求有效。

See this question for a wonderful discussion on when to use POST and when to use GET

如果您确实计划将数据发布到服务器,并且抱怨缺少CSRF密钥,则有两种方法可以将其添加到请求中:

  • 使用插件允许原型从codeigniter设置的csrf cookie中提取数据;这可能会更优雅,但会为你的总脚本添加更多内容;这是一篇关于如何在原型http://codeinthehole.com/writing/javascript-cookie-objects-using-prototype-and-json/

  • 中访问cookie的详细信息
  • 如果您从现有表单发送此请求,则 应该包含该键的隐藏输入字段,您可以使用{{1 (这是jQuery语法,但我确定原型版本并不太远)。 如果该页面中没有表单,只需在某处写一个var csrf = $("input[name=csrf_key]").val();以确保隐藏字段由CI打印出来。

最后,请确保将该值与POST请求一起发送,以确保您是一个不想hackz0r服务器的酷人。您应该将此参数添加到JS中的ajax请求:

echo form_open(); form_close();

其中csrf是您获取密钥的变量(来自cookie或隐藏的输入)。确保名称没问题!如果您要提取Cookie,请确保Cookie名称与parameters: {'csrf_key' : csrf} 中设置的名称一致。输入令牌也一样!

希望这有帮助!