php ci csrf,Codeigniter开启CSRF protection时 用ajax post提交 报错的解决办法 | 极安全-JiSec...

efdca16f875a32d7d734d5fbcf5f6751.png在CI 3.0中有一个csrf(Cross Site Request Forgery) protection的功能

开启了csrf后 由于出于安全考虑 ci3中用ajax post 提交 必须要用到toke 令牌

如果这个扩展打开了的话

POST ajax提交就会报错 我用的nginx 报的403

The action you have requested is not allowed.

大意是

你所要求的行动是不允许的。

会无法执行

这时候要在表单传送的数值中加入一个token的值

才能正常使用表单功能

可以在application/config/config.php中找到下面這几行

$config['csrf_protection'] = TRUE;

$config['csrf_token_name'] = 'csrf_test_name';

$config['csrf_cookie_name'] = 'csrf_cookie_name';

$config['csrf_expire'] = 7200;

原本$config[‘csrf_protection’]预设是FALSE 改成TRUE就可以打开了 开启之后 会自动帮你在cookie中存一个值 cookie的name在上面说的config.php中可以设定 之后传送表单就要连这个token一起传才行

$(function(){

$('#btn').click(function(){

$.ajax({

type:'POST'

,url:'/ajax' //ajax接收的server端

,data:$('#form').serialize()+'&csrf_test_name='+ getCookie('csrf_test_name')

,success:function(data){

alert(data.msg);

}

,dataType:'json'

});

});

});

function getCookie(name){

var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));

if(arr != null) return unescape(arr[2]); return null;

}

getCookie()是用js取出cookie的值

这个js 可以直接拿去用

而csrf_test_name就是在config.php中可以设定的参数

将这个cookie抓出来一起送出表单

就可以正常使用了

最后这个完整的form看上去应该像这样的

$(function(){

$('#btn').click(function(){

$.ajax({

type:'POST'

,url:'/ajax' //ajax接收的server端

,data:$('#form').serialize()+'&csrf_test_name='+ getCookie('csrf_test_name')

,success:function(data){

alert(data.msg);

}

,dataType:'json'

});

});

});

function getCookie(name){

var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));

if(arr != null) return unescape(arr[2]); return null;

}

getCookie()是用js取出cookie的值

这个js 可以直接拿去用

而csrf_test_name就是在config.php中可以设定的参数

将这个cookie抓出来一起送出表单

就可以正常使用了

最后这个完整的form看上去应该像这样的

昵称

邮箱

网址

如有问题,欢迎留言 大家一起讨论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值