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