Melindungi Aplikasi PHP dari SQL Injection
Pendahuluan
SQL injection masih jadi celah paling umum di aplikasi PHP, padahal pencegahannya sederhana: prepared statements.
Pembahasan
Artikel ini merangkum perjalanan dari menemukan bug bypass login (' OR 1=1 --) sampai membangun kebiasaan query aman dengan PDO.
Tiga inti:
- Pisahkan query dan data: prepare() + execute()
- Set ERRMODE_EXCEPTION dan EMULATE_PREPARES false
- Cast input yang tidak bisa di-bind (misalnya LIMIT)
Catatan lengkap beserta gotchas: Panduan Query Aman dengan PDO[1]
Kesimpulan
Data bukan kode. Jika aplikasimu masih menempel input user ke string SQL, sekarang saatnya pindah ke PDO prepared statements.
📚 Lampiran untuk Pembaca
Catatan pribadi penulis yang diringkas agar artikel ini utuh dibaca.
- [1] Panduan Query Aman dengan PDO
Koneksi yang disarankan: $pdo = new PDO($dsn, $user, $pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]); Prinsip: - Jangan pernah concat input ke query - Pakai placeholder ? atau :nama - Matikan emulate prep…