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 的值帶過去,就可以正常運作了。