【问题标题】:GroceryCRUD add, edit buttons not working when enabling CodeIgniter CSRF protection启用 CodeIgniter CSRF 保护时,GroceryCRUD 添加、编辑按钮不起作用
【发布时间】:2015-06-01 02:21:33
【问题描述】:

我正在使用GroceryCRUD 1.5.0 和CodeIgniter 2.2.0。

启用 CodeIgniter 的内部 CSRF 保护时:

$config['csrf_protection'] = TRUE;

application/config/config.php 中,GroceryCRUD 自动生成的操作按钮(编辑、查看)和链接(添加)不再起作用。

似乎 CSRF 令牌没有在 Ajax 调用中传递(通过 Firebug 确认)。是否可以将此 CodeIgniter 功能与 GroceryCRUD 一起使用?

【问题讨论】:

    标签: codeigniter csrf-protection grocery-crud


    【解决方案1】:

    我终于设法解决了我的问题。有两种选择:

    简单的方法

    设置:

    $config['grocery_crud_dialog_forms'] = false;
    

    application/config/grocery_crud.php

    此选项在不启用 CSRF 保护的情况下运行良好(也就是说,可以将其设置为 true 以生成更优雅的表单),但如果在 javascript 中未进行任何代码修改,则设置时会失败。

    优雅的方式

    如果我们想使用:

    $config['grocery_crud_dialog_forms'] = true;
    

    application/config/grocery_crud.php拥有可爱的表格,然后:

    1. 在带有表单的页面中包含jquery.cookie plugin

    2. 将此代码添加到您的 JS 文件中,以在所有 ajax POST 调用中自动神奇地插入 CSRF 令牌:

    $(document).ready(function() {
        var csrf_token= $.cookie('csrf_cookie_name');
    
        $.ajaxSetup({
            data: {
                'csrf_test_name' : csrf_token
            }
        });	
    });

    我希望这对其他人有帮助。

    【讨论】:

      【解决方案2】:

      以防万一有人遇到同样的错误:对于 CI 3.0.1 和 GroceryCRUD 1.5.1,Cookie 会随着 AJAX 请求正确发送,但是由于令牌更改,只有第一个请求会起作用.

      要始终使用相同的令牌,请设置(application/config/config.php):

      $config['csrf_regenerate'] = FALSE;
      

      编辑:参考手册:http://www.codeigniter.com/user_guide/libraries/security.html#cross-site-request-forgery-csrf

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-05
        • 2013-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多