【问题标题】:Using X-editable with CodeIgniter 3 CSRF issue将 X-editable 与 CodeIgniter 3 CSRF 问题一起使用
【发布时间】:2015-06-12 15:10:13
【问题描述】:

我正在使用启用 CSRF 的 CodeIgniter 3。我有一个页面正在使用 X 可编辑库 http://vitalets.github.io/x-editable/index.html 在该页面上进行内联编辑。

有人在 CodeIgniter 和 CSRF 开启的情况下使用 X-editable 吗?

我的问题是当我启用 CSRF 时,我收到以下 CodeIgniter 生成的错误:

<h1>An Error Was Encountered</h1>
<p>The action you have requested is not allowed.</p>

如果我在 CI 中禁用 CSRF,它会正常工作。

我所知道的是,在使用 X-editable 库时,我无法找到使用 CSRF 令牌添加隐藏字段的方法,因为 javascript 库添加了它自己的表单和表单字段。我知道 CI 的 open_form() 方法会自动添加带有 CSRF 令牌的隐藏字段,但我没有选择将它与这个特定的库一起使用。

有什么想法吗?我已经坚持了几天了。

这是我的 CI 项目中的 config.php 文件

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'mycsrfname';
$config['csrf_cookie_name'] = 'csrfcookiename';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();

这是在控制器中

$name = $this->input->post('name');
$value = $this->input->post('value');
$pk = $this->input->post('pk');
$result = $this->garage_model->editItem($name,$value,$pk);

【问题讨论】:

    标签: javascript php codeigniter csrf x-editable


    【解决方案1】:

    在我的情况下,我已排除 urls CSRF 以使该脚本正常工作; 查看配置文件:$config['csrf_exclude_uris'] = array('thename/ofcontrollertodisable');

    如果您找到更好的解决方案,请告诉我!

    【讨论】:

      【解决方案2】:

      禁用 ajax 调用的 CSRF 令牌不是一个好主意。相反,您应该通过参数发送令牌:

      params: function(params) {
                 params.csrfToken = $.cookie('csrfCookie');
                 return params;
      }
      

      【讨论】:

      • 我绝对同意不禁用 CSRF 令牌。
      【解决方案3】:

      如果它仍然是最新的,也许这可以帮助你。

      为了避免 Ajax 的跨站请求伪造 (CSRF) 问题,您可以在全局页面 javascript 中编写以下内容:

      var csfrData = {};
      csfrData['<?php echo $this->security->get_csrf_token_name(); ?>'] = '<?php echo $this->security->get_csrf_hash(); ?>';
      

      然后在你的函数中使用它:

      // Attach CSFR data token
      $.ajaxSetup({ data: csfrData });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-28
        • 2015-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-22
        • 1970-01-01
        相关资源
        最近更新 更多