Validasi & Sanitasi Input
Aturan nomor satu keamanan web: jangan pernah percaya data dari user. Semua input — dari form, URL, cookie, header — bisa dimanipulasi oleh hacker. Validasi dan sanitasi adalah tameng pertama aplikasimu.
Validasi vs Sanitasi
Best practice: Validasi dulu, sanitasi kemudian — lakukan keduanya.
Serangan XSS (Cross-Site Scripting)
XSS terjadi ketika hacker menyisipkan JavaScript jahat ke dalam halamanmu:
htmlspecialchars() — Benteng Utama Anti-XSS
filter_input() dan filter_var()
PHP punya sistem filter bawaan yang powerful:
Validasi
Sanitasi
filter_input() — Langsung dari Superglobal
Server-Side vs Client-Side Validation
Client-side validation BUKAN keamanan!kenyamanan user (feedback cepat). Hacker bisa dengan mudah bypass-nya menggunakan DevTools atau curl. Selalu validasi ulang di server!
Pattern: Validasi Form Lengkap
Penggunaan:
Perlindungan SQL Injection
SQL Injection sudah dibahas di bab sebelumnya, tapi ini reminder penting:
Rangkuman
[!IMPORTANT] Checklist Keamanan Input
- ✅ htmlspecialchars() di semua output ke HTML (anti-XSS)
- ✅ Prepared statements di semua query database (anti-SQL injection)
- ✅ filter_var() untuk validasi email, int, URL
- ✅ Validasi di server — jangan andalkan client-side saja
- ✅ trim() input string — buang spasi di awal/akhir
- ✅ Whitelist — terima hanya yang diharapkan, tolak sisanya
- ✅ Pesan error yang informatif tapi tidak bocorkan detail teknis
Latihan
- Tambahkan class
Validatorke project Toko Online dan gunakan di form tambah produk - Coba akses form tanpa browser (pakai
curl) — buktikan bahwa validasi HTML bisa di-bypass - Buat helper
esc()dan ganti semuaecho $variabledi template menjadiecho esc($variable)
Selanjutnya
Input sudah divalidasi dan disanitasi. Lanjut ke Authentication vs Authorization → untuk memahami perbedaan antara "siapa kamu" dan "apa yang boleh kamu lakukan".