Defensive Coding Kata‑Demi‑Kata: Eliminasi Celah CSRF di PHP

Dalam dunia pemrograman web, CSRF (Cross-Site Request Forgery) adalah ancaman serius yang bisa membuat aplikasi kita rentan diserang.
Tapi jangan khawatir! Dengan defensive coding atau teknik pemrograman defensif, kita bisa menghilangkan celah CSRF secara efektif, terutama di PHP.

Di artikel ini, kita akan bahas langkah demi langkah cara menulis kode PHP yang aman dari CSRF, dengan bahasa yang mudah dipahami.


🔍 Apa Itu CSRF dan Mengapa Harus Diwaspadai?

CSRF terjadi ketika penyerang memanfaatkan browser pengguna untuk mengirimkan permintaan palsu ke server tanpa sepengetahuan pengguna.
Kalau tidak dilindungi, penyerang bisa melakukan aksi berbahaya seperti mengubah data, menghapus, atau bahkan mengambil alih akun.


🛠️ Langkah 1: Membuat CSRF Token

Pertama, kita buat token unik yang akan dikirim bersama form dan dicek saat permintaan diterima.

php
// Mulai session
session_start();
// Buat token jika belum ada
if (empty($_SESSION[‘csrf_token’])) {
$_SESSION[‘csrf_token’] = bin2hex(random_bytes(32));
}


📝 Langkah 2: Menyisipkan Token ke Form

Setiap form yang mengubah data harus menyisipkan token ini sebagai input tersembunyi:

html
<form method="POST" action="proses.php">
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
<!-- input lain -->
<input type="text" name="username">
<button type="submit">Kirim</button>
</form>

✅ Langkah 3: Memvalidasi Token Saat Terima Request

Saat menerima form, kita cek token yang dikirim dengan token di session:

php

session_start();

if ($_SERVER[‘REQUEST_METHOD’] === ‘POST’) {
if (!isset($_POST[‘csrf_token’]) || !hash_equals($_SESSION[‘csrf_token’], $_POST[‘csrf_token’])) {
die(‘Token CSRF tidak valid!’);
}
// Lanjut proses data karena token valid
}

hash_equals() digunakan untuk mencegah serangan timing attack.


🔄 Langkah 4: Regenerasi Token Setelah Sukses

Setelah token berhasil digunakan, sebaiknya token diubah supaya tidak bisa dipakai ulang:

php
unset($_SESSION['csrf_token']);
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

⚠️ Tips Tambahan Agar CSRF Bisa Dicegah Maksimal

  • Selalu gunakan metode POST untuk aksi yang mengubah data, jangan GET.

  • Batasi umur sesi dan token agar tidak berlaku selamanya.

  • Gunakan header SameSite pada cookie untuk membatasi pengiriman cookie dari luar domain.


🧾 Kesimpulan

Dengan menulis kode PHP secara defensif seperti di atas, kamu sudah bisa menghilangkan celah CSRF dengan efektif.
Mulai dari pembuatan token, penyisipan ke form, validasi saat request, sampai regenerasi token, semua langkah ini penting untuk keamanan aplikasi.

Ingat, kode yang aman bukan hanya tentang fitur, tapi juga perlindungan dari serangan tersembunyi seperti CSRF.

Penulias : Muhammad Aditya Alkhawarizmi

Nim : 23156201023

jurusan : Sistem Komputer