SQL Injection: Panduan Lengkap Pencegahan & Deteksi untuk Developer 2026 | Ilmu Komputer

Illustrasi SQL Injection

Apa itu SQL Injection?

SQL Injection (SQLi) adalah salah satu serangan web paling berbahaya yang memanfaatkan celah pada input pengguna untuk menyisipkan query SQL berbahaya. Meskipun sudah dikenal sejak awal 2000-an, SQLi masih masuk dalam OWASP Top 10 dan menjadi penyebab utama kebocoran data di berbagai aplikasi web.

Bagaimana SQL Injection Bekerja?

Serangan SQLi terjadi ketika aplikasi web menggabungkan input pengguna secara langsung ke dalam query SQL tanpa sanitasi. Contoh klasik:

SELECT * FROM users WHERE username = 'admin' AND password = 'password'
# Jika attacker memasukkan: ' OR '1'='1
# Query menjadi: SELECT * FROM users WHERE username = 'admin' AND password = '' OR '1'='1'

Hasilnya? Query akan mengembalikan semua data — akses berhasil tanpa password valid.

Jenis-jenis SQL Injection

  • In-band SQLi (Classic): Attacker menggunakan channel komunikasi yang sama untuk menyerang dan mengumpulkan hasil. Terbagi menjadi Error-based dan Union-based.
  • Inferential SQLi (Blind): Attacker tidak bisa melihat hasil langsung, tetapi menyimpulkan dari respons server (timing/delay atau boolean response).
  • Out-of-band SQLi: Menggunakan channel berbeda untuk menerima data, biasanya via DNS atau HTTP request ke server attacker.

Tools Deteksi SQL Injection

  • SQLMap — Tool otomatis paling populer untuk deteksi dan eksploitasi SQLi. Support semua jenis database (MySQL, PostgreSQL, MSSQL, Oracle, SQLite).
  • jSQL Injection — GUI tool dengan fitur batch scan dan dump database.
  • Burp Suite Scanner — Scanner otomatis untuk SQLi dalam traffic HTTP.
  • NoSQLMap — Khusus untuk NoSQL injection (MongoDB, CouchDB).

Panduan Pencegahan untuk Developer

1. Gunakan Prepared Statements / Parameterized Queries

Ini adalah pertahanan paling efektif. Dengan prepared statements, query SQL dikirim ke database terpisah dari data pengguna:

# Python dengan psycopg2 (PostgreSQL)
cursor.execute("SELECT * FROM users WHERE username = %s AND password = %s", (username, password))

# Python dengan sqlite3
cursor.execute("SELECT * FROM users WHERE username = ? AND password = ?", (username, password))

2. Validasi Input (Whitelist vs Blacklist)

Terapkan whitelist validation — hanya izinkan karakter yang diharapkan. Jangan hanya mengandalkan blacklist karena attacker selalu bisa bypass.

3. Gunakan ORM (Object-Relational Mapping)

Framework seperti Django ORM, SQLAlchemy (Python), atau Hibernate (Java) secara otomatis menggunakan parameterized queries.

4. Principle of Least Privilege

Database user untuk aplikasi web sebaiknya hanya memiliki akses SELECT, INSERT, UPDATE, DELETE pada tabel yang diperlukan — bukan DROP, ALTER, atau akses ke tabel sistem.

5. Web Application Firewall (WAF)

WAF seperti ModSecurity atau Cloudflare WAF bisa memblokir payload SQLi umum sebelum mencapai aplikasi.

Testing SQL Injection di Lab

Untuk praktik SQL Injection dengan aman, gunakan lab berikut:

  • OWASP Juice Shop — Aplikasi sengaja rentan dengan berbagai tantangan SQLi.
  • DVWA (Damn Vulnerable Web Application) — Lab klasik untuk latihan SQLi dengan tingkat kesulitan gradual.
  • SQLi Labs — Lab khusus untuk berbagai jenis SQL Injection.

Kesimpulan

SQL Injection tetap menjadi ancaman serius di 2026 karena banyak developer masih mengabaikan praktik coding aman. Dengan menerapkan prepared statements, validasi input, dan ORM, risiko SQLi bisa ditekan hingga hampir 0%. Selalu uji aplikasi Anda dengan SQLMap atau tool scanning lainnya sebelum deploy ke production.

Iklan

Iklan
Iklan

Iklan
Iklan

Iklan
Iklan