Cross Site Request Forgery - Sabilla Ardani Putri

Apa Itu CSRF (Cross-Site Request Forgery)?



CSRF adalah jenis serangan keamanan web di mana penyerang memanfaatkan sesi login korban yang masih aktif untuk melakukan aksi berbahaya tanpa sepengetahuan korban. Aksi ini terjadi karena browser korban secara otomatis mengirimkan cookie/session aktif ke server saat melakukan request

Contoh: Kamu sedang login ke situs bank. Tanpa kamu sadari, kamu mengklik link di email yang dikirim penyerang. Tiba-tiba, uangmu dikirim ke rekening penyerang.

Mekanisme Serangan CSRF

Penyerang membuat request berbahaya, bisa berupa form tersembunyi atau link dengan query string, Mengelabui korban. Penyerang menyebar form atau link lewat email, forum, atau situs palsu agar diklik oleh korban. Permintaan dikirim dengan kredensial korban, browser korban otomatis menyertakan session (cookie login) saat request dikirim ke situs target. Server target memproses permintaan, karena datang dari user yang sedang login, server menganggapnya valid dan memprosesnya.

Studi Kasus: Transfer Uang

  • Pak Budi login ke situs bank.
  • Penyerang mengirim link berbahaya: http://bank.com/transferamount=1000&to=attacker_account
  • Pak Budi mengklik link tersebut tanpa curiga.
  • Uang langsung ditransfer ke rekening penyerang.

Berikut adalah cra membangun Demo Serangan CSRF

Buka C:\xampp\htdocs\, lalu buat folder baru bernama csrf



Buat File index.html

Buka teks editor (misal: Notepad, VS Code), dan simpan file berikut di dalam folder csrf.

Lokasi file: C:\xampp\htdocs\csrf\index.html
Isi file:

<!DOCTYPE html> <html> <body> <h2>Transfer Uang</h2> <form action="transfer.php" method="POST"> <label for="amount">Jumlah:</label><br> <input type="text" id="amount" name="amount"><br> <label for="to">Kepada:</label><br> <input type="text" id="to" name="to"><br><br> <input type="submit" value="Transfer"> </form> </body> </html>

Buat File transfer.php

Lokasi file: C:\xampp\htdocs\csrf\transfer.php
Isi file:

<?php session_start(); // Transfer tanpa perlindungan CSRF $amount = $_POST['amount']; $to = $_POST['to']; echo "Transferred $amount to $to"; ?>

Uji Form Transfer

1. Jalankan XAMPP → Start Apache




2. Buka browser, lalu akses:
 http://localhost/csrf/index.html
3. Isikan data transfer (misal: jumlah: 1000, kepada: teman)













4. Klik Transfer → Harus muncul: Transferred 1000 to teman

    


Ini membuktikan form berjalan normal tanpa perlindungan CSRF.

Buat File csrf_attack.html

Lokasi file: C:\xampp\htdocs\csrf\csrf_attack.html
Isi file:

<!DOCTYPE html> <html> <body> <h2>CSRF Attack</h2> <form action="http://localhost/csrf/transfer.php" method="POST"> <input type="hidden" name="amount" value="1000"> <input type="hidden" name="to" value="attacker_account"> <input type="submit" value="Submit"> </form> </body> </html>

Jalankan Serangan

1. Buka http://localhost/csrf/csrf_attack.html lalu klik tombol Submit








2. Muncul: Transferred 1000 to attacker_account

    


Ini menunjukkan serangan berhasil. Padahal user tidak merasa melakukan transfer.


Mencegah CSRF dengan Token

Untuk mencegah serangan CSRF, kita bisa menggunakan CSRF Token. Token ini unik dan harus dikirim bersama setiap form. Server akan memverifikasi token sebelum memproses permintaan.

Ubah index.html jadi index.php (agar bisa pakai PHP)

Ubah nama file:

  • index.htmlindex.php



Isi file index.php:

<?php session_start(); // Generate token jika belum ada if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } $token = $_SESSION['csrf_token']; ?> <!DOCTYPE html> <html> <body> <h2>Transfer Uang</h2> <form action="transfer.php" method="POST"> <label for="amount">Jumlah:</label><br> <input type="text" id="amount" name="amount"><br> <label for="to">Kepada:</label><br> <input type="text" id="to" name="to"><br><br> <!-- Tambahkan token ke dalam form --> <input type="hidden" name="csrf_token" value="<?= $token ?>"> <input type="submit" value="Transfer"> </form> </body> </html>

Ubah transfer.php untuk validasi token

Isi baru file transfer.php:

<?php session_start(); if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) { die("Permintaan tidak valid! Token tidak cocok."); } $amount = $_POST['amount']; $to = $_POST['to']; echo "Transferred $amount to $to"; ?>

Coba Lagi Transfer Normal

1. Akses: http://localhost/csrf/index.php

2. Isi form dan submit.

3. Jika token valid → tampil : Transferred 1000 to teman



Coba Serangan Lagi

1. Akses kembali: http://localhost/csrf/csrf_attack.html
2. Klik Submit lalu akan muncul pesan: Permintaan tidak valid! Token tidak cocok.

    


Serangan CSRF berhasil digagalkan!

Dampak dari Serangan CSRF

  1. Kehilangan Aset – seperti uang yang ditransfer tanpa izin.

  2. Kompromi Akun – mengubah email, password, atau data penting lainnya.

  3. Reputasi Website Buruk – pengguna kehilangan kepercayaan.

  4. Tindakan Hukum – bagi aplikasi finansial yang lalai mengamankan pengguna.

Kesimpulan

  • CSRF bisa sangat berbahaya, terutama untuk aplikasi yang memproses data sensitif atau keuangan.

  • Gunakan CSRF Token sebagai perlindungan dasar dalam setiap form.

  • Pastikan server memverifikasi token pada setiap permintaan penting.

Komentar

Postingan populer dari blog ini

Local File Inclusion (LFI) & Remote File Inclusion (RFI) - Sabilla Ardani Putri

TIDAK TERPAKAI - Footprinting dan Reconnaissance menggunakan Whois, Web History, Google Dork, GHDB

Manajemen Data Master - Sabilla Ardani Putri