CSRF dijelaskan dengan bahasa manusia
CSRF memaksa browser korban mengirim permintaan yang tidak dia kirim sendiri. Penjelasannya sederhana, pencegahannya juga.
Analogi yang membuatnya klik
Bayangkan kartu akses gedung yang otomatis diverifikasi setiap kali kamu lewat pintu. CSRF adalah saat orang lain berjalan di belakangmu sambil membawa surat perintah, dan pintu membukakan karena kartumu terbaca, bukan karena suratnya sah.
Browser otomatis melampirkan cookie di setiap request ke domain asalnya. Server melihat cookie yang sah dan percaya itu keinginan pengguna. Padahal siapa yang memicu request bisa jadi halaman jahat di tab lain.
Kapan CSRF bisa terjadi
Tiga bahan: autentikasi via cookie yang otomatis terkirim, aksi yang mengubah sesuatu, dan request yang bisa dibuat tanpa token khusus. Aksi GET yang mengubah data juga termasuk, itulah kenapa aksi perubahan seharusnya tidak pernah lewat GET.
Perbaikan yang benar
SameSite=Lax atau Strict pada cookie menghentikan mayoritas skenario dengan sekali set. Token CSRF menambah lapisan kedua untuk form klasik. Untuk API modern dengan token di header, CSRF praktis tidak relevan karena browser tidak melampirkannya otomatis.
Verifikasi Origin header di sisi server adalah pemanis terakhir yang murah: kalau Origin ada dan tidak cocok, tolak.