Apa
itu CSRF?
Cross-Site Request Forgery (CSRF) adalah jenis serangan keamanan web di mana penyerang mengelabui pengguna untuk melakukan tindakan yang tidak diinginkan di situs web yang telah mereka autentikasi. Serangan ini memanfaatkan kepercayaan yang dimiliki situs web terhadap pengguna yang sah.
Cara
Kerja CSRF
· Pengguna Login ke Situs
Web Sah:
Pengguna pertama-tama login ke situs web yang sah
menggunakan kredensial yang benar.
· Penyerang Mengirim
Permintaan Jahat:
Penyerang kemudian membuat halaman web berbahaya
atau email yang mengandung link atau form yang tampak sah tetapi sebenarnya
ditujukan untuk mengirim permintaan berbahaya ke situs web yang sudah diakses
pengguna.
· Pengguna Mengunjungi
Halaman Berbahaya:
Pengguna yang sudah login ke situs web sah
kemudian mengunjungi halaman web berbahaya yang dibuat oleh penyerang.
· Permintaan Terkirim ke
Situs Web Sah:
Karena pengguna telah diautentikasi di situs web
sah, permintaan jahat tersebut dikirim dengan menggunakan kredensial pengguna
yang sah (seperti cookie sesi yang sudah valid).
· Situs Web Sah
Mengeksekusi Permintaan:
Situs web sah menerima permintaan yang tampaknya
berasal dari pengguna yang sah dan mengeksekusinya, yang dapat mengakibatkan
tindakan yang tidak diinginkan seperti transfer dana, perubahan kata sandi,
atau penghapusan data.
Demo: contoh formulir transfer uang yang rentan terhadap serangan CSRF
• Buat sebuah folder di C:\xampp\htdocs\ bernama csrf.
•Di dalam folder csrf, buat file bernama index.html dengan isi sebagai berikut
• Buat file bernama transfer.php dengan isi sebagai berikut:
• Buat file bernama csrf_attack.html dengan isi sebagai berikut:
•Akses Formulir Transfer:
- Buka browser dan akses http://localhost/csrf/index.html
- Isi formulir dan submit untuk memastikan transfer bekerja.
• Luncurkan Serangan:
- Buka http://localhost/csrf/csrf_attack.html.
• Klik tombol submit dan lihat hasil di halaman transfer.php.
Bentuk mitigasi yang bisa dilakuakn
Untuk melindungi form ini dari serangan Cross-Site Request Forgery (CSRF), bisa menambahkan token CSRF pada form dan memvalidasi token tersebut di server saat form dikirim. Berikut adalah contoh bagaimana cara melakukannya:
Generate dan simpan token CSRF di server: Modifikasi file
transfer.php
untuk membuat token CSRF dan menyimpannya di sesi.Tambahkan token CSRF ke dalam form: Sisipkan token CSRF yang dihasilkan ke dalam form sebagai input hidden.
Validasi token CSRF di server: Pastikan token yang dikirim bersama form valid sebelum memproses permintaan.
Berikut adalah contoh implementasi:
perubahan pada file index.html
Hasil yang diperoleh
Dampak dari CSRF
- Transfer Dana Tidak Sah: Seperti contoh di atas, penyerang bisa mengalihkan dana ke akun mereka.
- Mengubah Pengaturan Akun: Penyerang bisa mengubah alamat email atau kata sandi pengguna.
- Mengirim Pesan Berbahaya: Penyerang bisa mengirim pesan atau posting konten yang tidak diinginkan atas nama pengguna.
- Eksekusi Perintah Berbahaya: Penyerang bisa menjalankan perintah berbahaya yang merusak data atau sistem.
Cara Mencegah CSRF
Token CSRF
Token CSRF adalah nilai acak yang unik yang dikirimkan bersama dengan setiap permintaan yang membutuhkan otorisasi. Token ini biasanya disisipkan dalam formulir atau sebagai header HTTP. Server memverifikasi token ini sebelum memproses permintaan.
Implementasi Token CSRF:
- Membuat Token: Saat sesi pengguna dimulai, server membuat token CSRF yang unik.
- Menyisipkan Token dalam Formulir: Token tersebut disisipkan dalam setiap formulir HTML sebagai input tersembunyi.
- Memverifikasi Token: Saat permintaan diterima, server memverifikasi apakah token yang diterima cocok dengan token yang disimpan di server.
Verifikasi Referer dan Origin
- Referer Header: Server dapat memeriksa header Referer untuk memastikan permintaan datang dari domain yang sah.
- Origin Header: Header Origin lebih sulit untuk dimanipulasi dan dapat digunakan untuk memverifikasi asal permintaan.
Penggunaan CAPTCHA
Menggunakan CAPTCHA pada formulir kritis dapat mencegah serangan otomatis karena CAPTCHA memerlukan interaksi manusia.
SameSite Cookie Attribute
Pengaturan atribut SameSite
pada cookie dapat membatasi pengiriman cookie hanya untuk permintaan dari domain yang sama.
Penggunaan Header HTTP
Header seperti X-Requested-With: XMLHttpRequest
dapat digunakan untuk memverifikasi bahwa permintaan datang dari sumber yang sah, walaupun ini bukan solusi yang paling aman karena header ini bisa dimanipulasi.
Kesimpulan
Melindungi aplikasi web dari serangan CSRF sangatlah penting untuk mencegah tindakan yang tidak sah yang bisa membahayakan pengguna dan integritas aplikasi. Dengan menerapkan perlindungan CSRF, seperti menggunakan token CSRF, kita dapat memastikan bahwa setiap permintaan POST yang diterima oleh server benar-benar sah dan berasal dari sumber yang valid. Selalu pastikan untuk menerapkan praktik keamanan terbaik dalam pengembangan aplikasi web guna melindungi pengguna dan data mereka.
Komentar
Posting Komentar