Apa Itu CSRF? Bagaimana Kita Dapat Mencegah CSRF?
January 23, 2024
Di era digital, Internet telah menjadi bagian tak terpisahkan dari kehidupan sehari-hari kita. Banyak aktivitas telah beralih ke dunia online, mulai dari belanja hingga bersosialisasi di berbagai platform dan melakukan transaksi perbankan. Seiring dengan semakin meluasnya interaksi keuangan, dampak dari keamanan jaringan pun semakin terasa. Salah satu ancaman siber yang paling umum di Internet adalah CSRF (Cross-site request forgery), dan penting untuk memahami seluk-beluknya.
Apa Itu CSRF?
Serangan CSRF memanfaatkan kerentanan dalam mekanisme validasi permintaan pada situs web target. Dalam situasi tertentu, pengguna tanpa sadar menjalankan permintaan berbahaya saat mereka masuk ke situs web target. Penyerang biasanya menggunakan alamat yang mirip dengan domain situs web target, memancing pengguna untuk mengklik. Mereka menyisipkan kode jahat dengan menyamarkannya sebagai pemuatan gambar atau formulir tersembunyi, memulai permintaan ke situs web target, dan menjalankan tindakan tidak sah secara diam-diam. Tujuan seperti mengubah kata sandi pengguna atau memulai transfer bank tanpa izin dapat menyebabkan kerugian besar bagi pengguna.
Contoh Nyata
Bayangkan sebuah situs web bernama e-bank.com yang menawarkan layanan perbankan elektronik, dengan halaman bernama /transfer untuk mengirimkan permintaan transfer. Ketika pengguna mengakses halaman e-bank.com/transfer, sebuah formulir yang menampilkan detail yang dimasukkan oleh pengguna akan muncul. Setelah formulir diisi dan dikirim, permintaan HTTP POST akan dikirim ke alamat halaman tersebut, membawa parameter seperti penerima dan jumlah yang dimasukkan oleh pengguna.
Pada titik ini, penyerang dapat membuat halaman jahat dengan formulir yang tidak terlihat, mengarahkan alamat pengiriman ke e-bank.com/transfer. Penyerang mengisi formulir tersebut dengan parameter penerima dan jumlah tertentu. Ketika pengguna tertipu untuk mengklik halaman jahat ini, browser akan menjalankan kode JavaScript, mengirimkan formulir tersebut.
Jika pengguna tidak terdaftar atau tidak masuk ke e-bank.com, permintaan transfer tidak dapat dieksekusi. Namun, jika pengguna baru saja menggunakan layanan tersebut dan status login masih aktif, permintaan transfer mungkin akan berhasil dieksekusi.
Inilah inti dari serangan CSRF—sederhana dalam prinsipnya tetapi memiliki potensi bahaya yang besar. Untungnya, ada banyak metode matang yang dapat digunakan untuk mencegah serangan semacam ini. Mari kita bahas di bawah ini.
Bagaimana Kita Dapat Mencegah CSRF?
Mengatasi masalah ini melibatkan tindakan proaktif dan pasif.
Pembatasan Metode HTTP dan Referer
Sebagai pengembang, kita dapat menerapkan pembatasan yang lebih ketat pada alamat sensitif dalam layanan, seperti:
-
Untuk alamat yang memerlukan pengiriman data, larang penggunaan permintaan HTTP GET, memaksa penggunaan permintaan POST. Ini menambah kompleksitas bagi penyerang yang mencoba membuat halaman jahat.
-
Selain itu, kita dapat membatasi bidang Referer di header permintaan HTTP (Referer), hanya mengizinkannya dari alamat sah yang diketahui dan memblokir permintaan jahat.
Ini adalah langkah perlindungan proaktif yang sederhana dengan biaya rendah tetapi masih memiliki beberapa kerentanan terhadap serangan.
Token CSRF
Token CSRF adalah solusi yang banyak digunakan, menggabungkan mekanisme sesi di sisi server untuk mencegah serangan CSRF. Secara spesifik, program di sisi server menyematkan bidang input tersembunyi pada halaman yang memerlukan perlindungan dengan Token CSRF yang dihasilkan secara acak dalam formulir keluaran. Secara bersamaan, sesi dibuat di sisi server, menyimpan string acak ini dengan waktu kedaluwarsa.
Ketika pengguna meminta halaman tersebut, server menginisialisasi sesi, menyimpan data di sisi server dan mengatur cookie di browser klien yang berisi ID Sesi untuk asosiasi. Token CSRF disimpan dalam sesi. Saat formulir dikirim, Token CSRF dikirim. Program di sisi server membandingkan token ini dengan bagian yang disimpan dalam sesi. Validasi yang berhasil akan mengarah ke eksekusi logika selanjutnya; jika tidak, kesalahan akan dikembalikan. Secara bersamaan, Token CSRF baru dimasukkan ke dalam formulir untuk pengiriman berikutnya.
Ini adalah langkah perlindungan proaktif yang memerlukan beberapa upaya tetapi memberikan perlindungan yang kuat.
Perlindungan Cross-Origin
Kita sering menemukan teknologi bernama CORS (Cross-Origin Resource Sharing), sebuah spesifikasi yang menunjukkan apakah browser mengizinkan permintaan lintas asal. Browser modern mendukung spesifikasi ini. Saat memulai permintaan Fetch/XHR pada halaman yang ada, browser mengirim permintaan HTTP OPTIONS untuk memeriksa apakah layanan target mengizinkan permintaan dari alamat sumber saat ini. Server akan memberikan daftar response-headers, menentukan sumber yang diizinkan, metode permintaan, dan header. Browser mengikuti indikasi ini, mencegah permintaan yang dilarang di sisi klien.
Ini adalah langkah perlindungan proaktif lainnya, dapat dikonfigurasi di sisi server, tetapi perlu diingat bahwa meskipun pengguna normal tidak mungkin menonaktifkan fitur ini, hal itu tetap mungkin dilakukan di sisi klien.
Memblokir Cookie Pihak Ketiga
Layanan yang kita kembangkan terkadang menyimpan ID Sesi pengguna dalam Cookie untuk mempertahankan status login. Cookie mendukung pengaturan SameSite, mencegah browser mengirim cookie ke situs lintas asal. Mencoba serangan CSRF akan menghasilkan status tidak terautentikasi di situs target.
Selain itu, karena penyalahgunaan mekanisme HTTP Cookie untuk pelacakan klien, pengembang browser telah memutuskan untuk membatasi dan memblokir cookie pihak ketiga (Cookie Countdown) secara bertahap. Ketika sebuah halaman di domain A mencoba melakukan panggilan ke domain B, meskipun melewati pemeriksaan aturan CORS, browser tidak akan mengirim cookie ke situs lintas asal tersebut.

Ringkasan
Sebagai gateway API, baik Apache APISIX maupun API7 Enterprise mendukung Token CSRF dan CORS—dua langkah perlindungan yang disebutkan sebelumnya—untuk mencegah serangan CSRF.
Kesimpulannya, mencegah serangan CSRF memerlukan pendekatan multifaset, menggabungkan berbagai teknik di sisi server, browser, protokol HTTP, dan lainnya untuk mencapai perlindungan yang komprehensif.