php ci csrf,Codeigniter开启了CSRF protection后,表单以及ajax传输都要带上一個token的值...

如果打開這個功能的話

post表单,提交給server 后报错: Error 500

An Error Was Encountered

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一起傳才行

以下用jquery的ajax功能示範$(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的值

這是在網路上找到的 可以直接拿去用

而csrf_test_name就是在config.php中可以設定的參數

將這個cookie抓出來一起送出表單

就可以正常使用了

####表单中,隐藏域实例:csrf_token_name?>" value="security->csrf_hash?>"

另外還有一點就是

如果是用CI內建的form helper

在開啟csrf_protection時 會自動幫你加入這個token的值

我本身是沒有在用啦

如果有在用的人 就會比較方便囉 (或許根本就不會發現這個問題XD)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值