[CodeIgniter 4] 使用 CSRF 保護資料的傳遞,並說明搭配 axios/AJAX 的呼叫方法

分享:

CSRF 在資安上是很重要的一個議題,可以參考這篇的說明,這邊就來說明該怎麼在 CodeIgniter 4 啟用 CSRF。

首先可以在 app/Config/Filters.php 這個檔案啟用全域的 CSRF 防護,找到以下的 code 並打開:

public $globals = [
    'before' => [
        //'honeypot'
        'csrf'
    ]
];

接著只要使用 form_open() 建立表單,就會自動幫你建立 csrf 的欄位了。

或者你也可以手動建立,像是使用 csrf_token() 跟 csrf_hash() 產生 hidden 欄位

<input type="hidden" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>" />

或直接用 csrf_filed()

<?= csrf_field() ?>

 

這樣就會幫你做好 csrf 防護了,以上是用 form 表單傳遞時,如果要使用 AJAX/axios 的話,則要像上面一樣多帶入值,像是:

let bodyFormData = new FormData();
bodyFormData.append('<?=csrf_token()?>', '<?= csrf_hash() ?>');

將 csrf token 的值帶過去,就可以正常運作了。

 

課程推薦

和我們交流

加入我們的社群,裡面會有一些技術的內容、有趣的技術梗,以及職缺的分享,歡迎和我們一起討論。