【问题标题】:codeigniter csrf protection error with ajaxajax的codeigniter csrf保护错误
【发布时间】:2023-03-08 12:26:01
【问题描述】:

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

谁来修复它?

在 CI 论坛搜索后,我找到了这个链接 codeigniter-csrf-protection-with-ajax,但我无法通过它解决。谁能帮助我?

【问题讨论】:

    标签: ajax prototypejs codeigniter-2 csrf-protection


    【解决方案1】:

    您应该在 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/ 中访问 c​​ookie 的详细信息

    • 如果您从现有表单发送此请求,它应该有一个包含密钥的隐藏输入字段,您可以使用 var csrf = $("input[name=csrf_key]").val(); 之类的内容轻松访问它(这是 jQuery 语法,但我确信原型版本不会太远)。 如果该页面中没有表单,只需在某处写 echo form_open(); form_close(); 以确保 CI 打印出隐藏字段。

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

    parameters: {'csrf_key' : csrf}
    

    其中 csrf 是您从中获取密钥的变量(来自 cookie 或来自隐藏的输入)。确保名字没问题!如果您要获取 cookie,请确保 cookie 名称与 config/config.php 中设置的名称一致。输入令牌也是如此!

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2012-02-03
      • 2011-10-23
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 2015-04-26
      • 2017-07-05
      • 2017-05-28
      相关资源
      最近更新 更多