CSRF (Cross-Site Request Forgery) — Security

Apa itu CSRF? CSRF (Cross-Site Request Forgery) adalah serangan yang memaksa browser pengguna yang sudah login mengirimkan request ke website target tanpa sepen

Apa itu CSRF?

CSRF (Cross-Site Request Forgery) adalah serangan yang memaksa browser pengguna yang sudah login mengirimkan request ke website target tanpa sepengetahuan pengguna. Browser secara otomatis menyertakan cookie (termasuk session cookie) di setiap request.

Bagaimana CSRF Bekerja

// 1. User login ke bank.com dan mendapat session cookie
// 2. User mengunjungi evil.com (tab baru, link di email, dll.)
// 3. evil.com memiliki form tersembunyi:

<form action="https://bank.com/transfer" method="POST" id="attack">
    <input type="hidden" name="to" value="hacker-account" />
    <input type="hidden" name="amount" value="10000000" />
</form>
<script>document.getElementById("attack").submit();</script>

// Browser mengirim POST ke bank.com dengan cookie session user!
// Bank.com mengira request ini dari user yang sah

Syarat CSRF Berhasil

Cara Mencegah CSRF

1. CSRF Token

// Server generate token unik per session/form
<form action="/transfer" method="POST">
    <input type="hidden" name="_token" value="random-csrf-token-abc123" />
    <!-- ... field lain -->
</form>

// Server memvalidasi token di setiap POST request
// Laravel otomatis melakukan ini dengan @csrf directive
<form method="POST" action="/transfer">
    @csrf
    <!-- ... -->
</form>

2. SameSite Cookie

// SameSite=Strict: cookie tidak dikirim di cross-site request
Set-Cookie: session=abc; SameSite=Strict; Secure; HttpOnly

// SameSite=Lax: cookie dikirim hanya untuk top-level navigation GET
Set-Cookie: session=abc; SameSite=Lax; Secure; HttpOnly

3. Verifikasi Origin dan Referer Header

// Cek header Origin atau Referer
function csrfCheck(req, res, next) {
    const origin = req.headers.origin || req.headers.referer;
    if (!origin || !origin.startsWith("https://myapp.com")) {
        return res.status(403).json({ error: "CSRF detected" });
    }
    next();
}

CSRF dan API

Yang akan kamu pelajari