用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4275|回复: 12
收起左侧

[版本 3.x] ci中的csrf问题

[复制链接]
发表于 2016-1-27 22:53:41 | 显示全部楼层 |阅读模式
在config中开起了$config['csrf_protection'] = TRUE;
 楼主| 发表于 2016-2-17 18:57:13 | 显示全部楼层
$("#FeedbackButton").click(function() {
    if ($('#info').val() == '') {
        $('#info_error').html('请填写反馈内容!');
        return false;
    }
    var data = {
        "<?php echo $this->security->get_csrf_token_name(); ?>":"<?php echo $this->security->get_csrf_hash(); ?>",
        "info": $('#info').val(),
        "title": $('#title').val(),
    }
    $.ajax({
        type: 'POST',
        url: "./feed_back",
        data: 'data=' + JSON.stringify(data),
        success: function(result) {
            // console.log(result);
            if (result == 1) {
                alert('提交成功,谢谢您的反馈!');
            }else{
                $("#info_error").html("反馈失败!");
                $("#info_error").hide(1000);
                return false;
            }
        }
    });
});

关闭csrf是没问题的
 楼主| 发表于 2016-1-27 22:57:29 | 显示全部楼层
而且在ajax中加入了如下
    var data = {
        "info": $('#info').val(),
        "title": $('#title').val(),
        "<?php echo $this->security->get_csrf_token_name();?>":"<?php echo $this->security->get_csrf_hash();?>"
    }
最后查看cookie
Cookie:pgv_pvi=488370176; pgv_si=s5763857408; ci_session=6109f6555a30c062dda4bea335b33a0ffced287b; csrf_cookie_name=9976c5c9d7aa3588f8092ab86d059aa2; Hm_lvt_cf1920cd78fec4dcdfbe5f528a5aa8c6=1453900856; Hm_lpvt_cf1920cd78fec4dcdfbe5f528a5aa8c6=1453906528

data中也有data:{"info":"事实上试试","title":"学生","csrf_test_name":"9976c5c9d7aa3588f8092ab86d059aa2"}

但是就是报错 403  The action you have requested is not allowed
发表于 2016-2-18 10:38:46 | 显示全部楼层
break 发表于 2016-2-17 18:57
$("#FeedbackButton").click(function() {
    if ($('#info').val() == '') {
        $('#info_error').h ...

你的沒問題應該僅限於 cookie 值吧 ?

url 我會建議給予完整路徑
可以使用 site_url()

data 則是可以直接接收 json 格式
意味著,即使你直接拿 var data 給 data
也是可以傳送成功
另外 'data=' 這是多餘的

你的問題可能來自於上述的兩個答案

 
发表于 2016-1-28 09:45:57 | 显示全部楼层
本帖最后由 Closer 于 2016-1-28 09:53 编辑
break 发表于 2016-1-27 22:57
而且在ajax中加入了如下
    var data = {
        "info": $('#info').val(),

route 或  ajax 有寫錯的地方
無關 csrf

如果是 csrf 的問題,會有 CI 式的報錯
 楼主| 发表于 2016-2-11 09:46:53 | 显示全部楼层
Closer 发表于 2016-1-28 09:45
route 或  ajax 有寫錯的地方
無關 csrf

能详细指点下吗?
发表于 2016-2-15 10:29:02 | 显示全部楼层
break 发表于 2016-2-11 09:46
能详细指点下吗?

關閉 CSRF 的情況
能正確傳值 ?
 楼主| 发表于 2016-2-15 21:30:19 | 显示全部楼层
Closer 发表于 2016-2-15 10:29
關閉 CSRF 的情況
能正確傳值 ?

能的,所有的代码都在上面贴出来了
发表于 2016-2-16 10:25:27 | 显示全部楼层
break 发表于 2016-2-15 21:30
能的,所有的代码都在上面贴出来了

我所謂能正確傳值是指
你送往該 route 的方法
然後直接 print_r() 或 die()
是否有反應 ?
 楼主| 发表于 2016-2-16 23:06:28 | 显示全部楼层
传不过去,403.能QQ指导吗?
发表于 2016-2-17 09:52:07 | 显示全部楼层
break 发表于 2016-2-16 23:06
传不过去,403.能QQ指导吗?

我很久沒在用 QQ 了
也許你可以提供完整的 ajax 程式碼 ?

ajax 傳送不成功
大多是 route 不正確和 ajax 傳輸格式錯誤有關

本版积分规则