Cross Site Request Forgery atau CSRF (dilafalkan ’sea-surf’) adalah sebuah celah keamanan dimana aplikasi web terlalu mempercayai sebuah request walaupun request tersebut bukan berasal dari inisiatif pengguna. Sebuah situs web berbahaya akan berusaha untuk mengeluarkan tindakan/action di situs Web lain tanpa sepengetahuan pengguna.
CONTOH : Anda sedang melakukan transaksi e-banking atau telah selesai melakukan transaksi menggunakan fasilitas ‘Remember Me’ ketika Anda login Situs ebanking. Pada saat status anda masih login di situs e-banking tersebeut, anda membuka situs berbahaya Anda melihat sebuah link yang “Menarik”, Anda pastinya tidak akan curiga karena website jahat tersebut berbeda dengan website ebanking. Lalu anda klik lah link yang menarik tersebut. Link itu ternyata berisi perintah untuk mentransfer sejumlah uang ke rekening seseorang.. Aplikasi web yang tidak terproteksi akan memproses permintaan tersebut karena posisi anda sedang login.
Pihak bank tidak akan dapat membedakan bahwa permintaan yang anda lakukan melalu web jahat tersebut palsu, kecuali bank kersebut telah melakukan proteksi CSRF. Masalah pencurian uang ini adalah contoh ekstrim, CSRF juga dapat digunakan untuk mencuri cookie dari sebuah situs web atau mengirim komentar spam di blog tanpa pengguna menyadari bahwa mereka melakukannya.
Salah satu solusi yang dapat dilakukan adalah dengan memproteksi form atau url pada aplikasi kita. Setiap form akan di beri sebuah “kunci”. Kunci ini akan bersifat dinamis pada setiap request dan form harus menyisipkannya kembli pada saat merespon. Sewaktu web server menerima request maka harus di cek kunci tersebut.
Pencegahan Sisi Client
Cara-cara praktis yang menurut saya dapat sedikit banyak mencegah dampak dari celah keamanan ini adalah sebagai berikut:
- Jangan lupa melakukan log out setelah usai menggunakan layanan di Internet.
- Akseslah hanya web-web yang terpecaya
- Gunakan perambah (browser) yang berbeda untuk mengakses layanan yang anda percayai (web mail dan semacamnya) dan untuk keperluan menjelajah Internet atau menggunakan mode yang lebih save ex incognito
Untuk sisi Pengembang
Untuk pengembang hal-haly yang bisa dilakukan adalah
- Menambahkan form konfirmasi ketika melakukan action yang kritikal
- Memberikan “Key” tertentu pada web kita
Perhatikan Contoh berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | < ? session_start(); #jika form di submit if(isset($_POST['submit'])) { if($_SESSION['csrfToken'] == $_POST['csrfToken']) { echo 'form Amana'; } else { echo "form Palsu";s } } else { $token = md5(date("Y/m/d h:i:j").uniqid(rand(), TRUE)); $_SESSION['csrfToken'] = $token; $form = ' <form method="POST" action=""> Account: <input type="text" name="account" /><br /> Amount: <input type="text" name="amount" /><br /> <input type="hidden" name="csrfToken" value="' . $token . '" /> <input type="submit" value="Send Money" name="submit" /> '; echo $form; } |
Perhatikan pada baris 6 dan 28, di situlah kita meng implementasikan key tadi. Jadi semua action yang kita terima harus berasal dari website yang valid.. (sebenarnya masih ada juga cara untuk mengatasi hal ini, tetapi setidaknya hacker menjadi lebih susah)
nice sharing mas xibnoe (barangkali masih ingat).
Newbie ikutan melengkapi ya. Kalau pakai CI session bisa pakai flashdata, sedangkan untuk kebutuhan cross-site bisa pakai bantuan $_SERVER['HTTP_REFERER'] untuk kemudian dicocokkan dengan nama domain situs yang dibolehkan mengirim data.
Yup kalo CI bisa pake flashdata, tetapi kalo pake referer masih blom karena variabel itu bisa dimanipulasi via header.
kalo pake ci gimana caranya mas.
tolong dijelasin yah, masih nuwbi nih
makacih banyak
ditunggu ya mas jawabannya
wah kasus ini pernah terjadi pada aplikasi mig33 untuk mentransfer credit
makasih buat tutorialnya om :)
ini semacam penggunaan salt ya, sip2,
mr. Ibn Daqiqil was my lecturer. he is a very good lecturer and intelligent. We are now looking for network security task about what it CSRF. thanks for the knowledge of CSRF.
Ijin comot separuh y pak, buat tugas keamanan jaringan.. :)
kalian ada untuk mempertahankan diri, sedangkan kami ada untuk menguji pertahanan anda