年紀大了有些事容易忘記... 所以.....

星期二, 4月 01, 2014

開啟及使用 Codeigniter 的 CSRF 保護

開啟及使用 Codeigniter 的 CSRF 保護

1.開啟 /application/config/config.php
$config['csrf_protection'] = true; //將此項設為 true
$config['csrf_token_name'] = 'csrf_test_name'; //此為csrf的token名稱,可自訂
$config['csrf_cookie_name'] = 'csrf_cookie_name'; //此為csrf的cookie名稱,可自訂
$config['csrf_expire'] = 7200; //cookie失效時間

2.將 CSRF 語法加入於表單內
如果你是使用 form_open() 去建立表單的話,CI會自己產生 csrf 的語法,如果你跟我一樣都喜歡自己寫表單,那就照下面的方式就可以了

在表單中插入下列字串
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name()?>" value="<?php echo $this->security->get_csrf_hash()?>" />

3.測試方法
表單送出後,如果表單內沒有csrf的token或是token不同的話,頁面會顯示 The action you have requested is not allowed. 訊息,拒絕操作

若僅前台要使用csrf,則修改config.php檔案,依實際情況調整下列語法即可
if(stripos($_SERVER["REQUEST_URI"],'/admin') === FALSE)
{
    $config['csrf_protection'] = TRUE;
}
else
{
    $config['csrf_protection'] = FALSE;
}  


※延伸閱讀
CodeIgniter User Guide Version - Security Class
http://ellislab.com/codeigniter/user-guide/libraries/security.html

CSRF (Cross Site Request Forgery) 跨網站請求偽造攻擊
http://en.wikipedia.org/wiki/Cross-site_request_forgery