Menggunakan CSRF Protection Di Codeigniter 4

CSRF (Cross-site Request Forgery) adalah salah satu jenis serangan keamanan website yang pada umumya dilakukan dengan menggunakan injeksi script ,link ,gambar atau semacamnya.Serangan yang umum dilakukan ada serangan brute force untuk mendapat user credentials atau hak untuk login.Salah satu cara untuk melindunginya adalah menggunakan request token.

Di tutorial ini kita akan bahas mekanisme penggunaan csrf protection di codeigniter 4.

Konfigurasi Awal

Untuk pengaturan fitur CSRF Protection di Codeigniter 4.Ada dua cara ,pertama di file .env atau di file app/Config/App.php.

Ada beberapa point di setting crsf yang perlu kita ketahui.

  1. CSRFTokenName nama dari token
  2. CSRFHeaderName nama dari header
  3. CSRFCookieName nama dari cookie
  4. CSRFExpire jangka waktu token expired satuannya detik
  5. CSRFRegenerate bernilai true atau false ,jika true setiap disubmit token untuk form berubah
  6. CSRFRedirect bernilai true atau false ,jika true ketika gagal akan kembali ke halaman sebelumnya.

Jika menggunakan file .env ubah settingnya menjadi seperti dibawah ini.

app.CSRFTokenName   = 'csrf_test_name'
app.CSRFHeaderName  = 'X-CSRF-TOKEN'
app.CSRFCookieName  = 'csrf_cookie_name'
app.CSRFExpire      = 7200
app.CSRFRegenerate  = true
app.CSRFRedirect = false

Jika menggunakan setting di file config rubah file app/Config/App.php menjadi seperti dibawah ini.

public $CSRFTokenName  = 'csrf_test_name';
public $CSRFHeaderName = 'X-CSRF-TOKEN';
public $CSRFCookieName = 'csrf_cookie_name';
public $CSRFExpire     = 7200;
public $CSRFRegenerate = true;
public $CSRFRedirect   = false;

Setelah kita melakukan setting diatas csrf protection di codeigniter 4 belum aktif,kita perlu melakukan mengaktifkannya dengan mengubah di folder app/Config/Filters.php

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

Maka csrf protection akan aktif secara global,kita juga bisa melakukan disabled csrf untuk beberapa request ,biasanya untuk membuat RESTful API.Kita mengubahnya di file sebelumnya.

public $globals = [
        'before' => [
                'csrf' => ['except' => [
                        'api/contact/save',
                        'api/contact/delete'
                    ]
                ]
        ]
];
Menggunakan CSRF Protection

Selanjutnya kita perlu menambahkan csrf token di form kita.Jika kita membuat form menggunakan form helper dari bawaan codeigniter yaitu fungsi form_open(),maka token otomatis sudah dibuat.

Jika tidak menggunakan form helper bisa menambahkan manual di dalam form kita,seperti kode dibawah ini.

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

Atau menggunakan fungsi csrf_field() untuk membuat seperti form diatas.

<form method="post">
    <?= csrf_field() ?>
</form>

Sekian tutorial kali ini,jika ada yang kurang dipahami bisa bertanya di kolom komentar yang harusnya dibawah.