Study
Play Framework

CSRF Protection Bawaan

Penjelasan

Play secara default mengaktifkan `CSRFFilter` untuk melindungi endpoint yang mengubah state (POST, PUT, DELETE) dari serangan Cross-Site Request Forgery — di mana situs jahat mencoba mengirim request atas nama user yang sedang login tanpa sepengetahuannya. Play menghasilkan token CSRF unik per session, dan setiap request non-GET wajib menyertakan token yang cocok, baik lewat hidden field di form atau header khusus. Di Twirl template, token CSRF disisipkan otomatis ke form lewat helper `@helper.CSRF.formHelper` atau `@CSRF.formField` yang menghasilkan hidden input, sehingga developer jarang perlu menanganinya manual. Untuk endpoint API yang memang sengaja tidak memakai session-based auth (misalnya API dengan token Bearer terpisah), CSRF protection bisa dikecualikan secara eksplisit.

Contoh Konsep

@* app/views/formProduk.scala.html *@
@import helper.CSRF

<form method="POST" action="/produk/simpan">
  @CSRF.formField
  <input type="text" name="nama" />
  <button type="submit">Simpan</button>
</form>

// Mengecualikan endpoint tertentu dari CSRF (misal API token-based):
// conf/routes
// +nocsrf
// POST   /api/produk    controllers.ApiController.simpan()

Praktikum

Tuliskan template form Twirl untuk mendaftarkan kategori baru (field "nama") yang menyertakan proteksi CSRF dengan benar.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Jangan mematikan CSRFFilter secara global hanya karena satu endpoint bermasalah — kecualikan endpoint spesifik itu saja lewat +nocsrf di routes, supaya proteksi tetap aktif di endpoint lain yang memang butuh.