CSRF, AJAX dalam CodeIgniter

#NeedProblemSolve

Halo, saya ingin bertanya tentang CSRF dan AJAX dengan kasus dependent dropdown. Setelah mencari ditutorial, yang paling cepat saya temukan solusinya adalah menggunakan Cookie JQuery Plugin. Pada setelah saya mengisikan form seperti pada gambar 1 dan melakukan submit maka muncul error seperti pada gambar 2 . Saya mohon solusi dari teman-teman di sini.

Full source code (Github): https://github.com/satyakresna/codeigniter-example/tree/csrf

Gist code for form.php: https://gist.github.com/satyakresna/05c98a29284db516ebba558f7adf666b

Gist code for Mahasiswa.php: https://gist.github.com/satyakresna/c4b5973c9aac63340d0bf61e791326c9

Gist code for config.php: https://gist.github.com/satyakresna/8d873303034ac90ae22713535b41450a

Kemudian, apakah harus mengaktifkan CSRF untuk setiap kali menggunakan form dan apakah hanya CSRF saja kunci untuk membuat form kita menjadi lebih secure, padahal sudah ada form_validation?

Terima kasih.

avatar satyakresna
@satyakresna

82 Kontribusi 55 Poin

Diperbarui 7 tahun yang lalu

5 Jawaban:

1. Saya ngga lihat kode untuk nyimpen csrf tokennya di cookie, yang ada di form.php kode ambil csrf dari cookie

 var csrf = $.cookie('csrf_cookie'); //ngambil bukan nyimpen

2. Saya ngga lihat dimana kode input csrf (spasi) token, seperti yang di screenshot gambar, dipakenya dimana? kode php yang ngolah input ini dimana

avatar hilmanski
@hilmanski

2670 Kontribusi 2132 Poin

Dipost 7 tahun yang lalu

Mas Hilman, terima kasih sudah membantu menjawab.

1. Sebenarnya itu kode sembarang saya ambil dari referensi. Jadi, waktu itu saya hanya terpikirkan bagaimana cara supaya dependent dropdown (AJAX) itu mau tampil dan bisa diganti-ganti ketika dalam satu form. Referensi: http://www.johnkieken.com/when-codeigniters-csrf-protection-breaks-your-ajax/

2. Apa yang mas Hilman maksud itu gambar pertama di pertanyaan kedua? Kalau iya, kode input csrf (spasi) token itu sebenarnya langsung disediakan oleh function form_helper yang disediakan oleh CodeIgniter dengan catatan harus memanggil library ('helper') atau di autoload.

3. Apa mas Hilman pernah menerapkan CSRF dan ajax di CodeIgniter khususnya kasus dependent dropdown? Sebenarnya, CSRF harus diterapkan setiap kali terlibat dengan sebuah form?

4. Saya menemukan jalan lain supaya ajax dan CSRF ini bisa berjalan dengan cara men-set $config['csrf_regenerate'] = FALSE; pada application\config\config.php

avatar satyakresna
@satyakresna

82 Kontribusi 55 Poin

Dipost 7 tahun yang lalu

Hmm.. susah saya debug nya karena pertanyaan2 yang awal tadi, kodenya kaya kurang harmonis. hehe. Saya belum pernah yang dropdown.

Mungkin saya kasih penjelasan singkat dulu, CSRF (Cross Site Request Forgery) ini contoh simplenya, misalnya ada halaman untuk belanja di toko online yang linknkya belanja.php?item=1

nah aslinya, kita bisa ke link itu, kalau sudah mengisi form sebelumnya, tapi "hacker" manfaatin kalo ada celah, dengan copy link nya, lalu "korban" akan klik, link itu dan otomatis belanja item tadi, padahal belum melalui pengisian form. Disini kita bisa manfaatin token tadi, dimana token tadi, selalu dicek , apakah tokennya udah kekirim bareng form yang diisi atau belum, makanya ada token juga di formnya.

avatar hilmanski
@hilmanski

2670 Kontribusi 2132 Poin

Dipost 7 tahun yang lalu

Hi mas Hilman, waduh kode saya tidak harmonis kata mas Hilman. Wkwkwk, hiks. Oh iya, saya sudah menemukan jalan terbaik dari kasus ini. Nanti akan saya publish di mading. :)

Selamat tahun baru!

avatar satyakresna
@satyakresna

82 Kontribusi 55 Poin

Dipost 7 tahun yang lalu

Jawaban Terpilih

avatar satyakresna
@satyakresna

82 Kontribusi 55 Poin

Dipost 7 tahun yang lalu

Login untuk ikut Jawaban