如果打開這個功能的話
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)