GroceryCRUD在启用CodeIgniter CSRF保护时添加,编辑按钮不起作用

时间:2015-03-27 16:55:02

标签: codeigniter csrf-protection grocery-crud

我正在使用GroceryCRUD 1.5.0与CodeIgniter 2.2.0。

使用以下命令启用CodeIgniter的内部CSRF保护时

$config['csrf_protection'] = TRUE;
application/config/config.php

,然后GroceryCRUD自动生成的操作按钮(编辑,查看)和链接(添加)不再有效。

似乎CSRF令牌未在Ajax调用中传递(使用Firebug确认)。可以将此CodeIgniter功能与GroceryCRUD一起使用吗?

2 个答案:

答案 0 :(得分: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令牌:

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

    我希望这会帮助别人。

答案 1 :(得分:1)

以防有人有同样的错误:对于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

相关问题