SQL Injection: Cara Kerja dan Cara Menghindarinya | Total IT

SQL Injection: Cara Kerja dan Cara Menghindarinya

By NV | 17 September 2025

SQL Injection (SQLi) adalah teknik serangan di mana penyerang menyisipkan (inject) perintah SQL berbahaya ke input aplikasi sehingga perintah itu dieksekusi oleh database. Akibatnya, penyerang bisa membaca, memodifikasi, atau bahkan menghapus data yang tersimpan di database jika aplikasi rentan.

Bagaimana SQL Injection bekerja

Aplikasi web biasanya membangun query SQL menggunakan input pengguna (mis. kotak pencarian, form login). Jika input tersebut langsung digabung ke string query tanpa pengamanan, penyerang dapat mengirim teks yang mengubah struktur query. Contoh sederhana (ilustrasi, bukan untuk dieksekusi):

Query rentan:

  SELECT * FROM users WHERE username = 'admin' AND password = 'password123';


Jika input password diset menjadi:

  ' OR '1'='1


Maka query menjadi:

  SELECT * FROM users WHERE username = 'admin' AND password = '' OR '1'='1';

 -> Kondisi selalu benar, sehingga bypass autentikasi mungkin terjadi.

Teknik ini memungkinkan penyerang untuk mengambil data, mengubahnya, atau menjalankan operasi yang seharusnya tidak diizinkan oleh aplikasi.

Jenis-jenis SQL Injection

1. In-band (error-based / UNION-based): data dikembalikan lewat saluran yang sama dengan injeksi; relatif mudah dieksploitasi.

2. Blind SQL Injection (boolean / time-based): aplikasi tidak menampilkan data langsung, sehingga penyerang menebak data lewat respon True/False atau delay. 

3. Out-of-band: memerlukan kemampuan server untuk mengirim data ke saluran lain; jarang tapi berbahaya. (termasuk kategori injection pada OWASP Top Ten). 

Dampak / Risiko

SQLi dapat menyebabkan pencurian data pengguna, eskalasi akses (membuat akun admin), penghapusan data, atau bahkan kompromi server lebih jauh. Banyak kebocoran data besar berakar pada kerentanan jenis ini. Karena mudah ditemukan dengan tools otomatis, risiko eksploitasi tinggi.

Cara Menghindari SQL Injection — Praktik Terbaik

Berikut langkah-langkah pencegahan yang efektif dan umum direkomendasikan:

1. Gunakan parameterized queries / prepared statements

Jangan gabungkan input langsung ke string SQL. Gunakan parameter bind yang disediakan library/driver DB. Ini solusi paling disarankan untuk hampir semua bahasa/platform.

Contoh (pseudocode):

# contoh Python (psycopg2 / DB-API style)

cur.execute("SELECT * FROM users WHERE email = %s AND status = %s", (email, status))

2. Gunakan ORM atau query builder yang aman
Framework/ORM modern (mis. Hibernate, Sequelize, Entity Framework) menyediakan mekanisme parameterisasi sehingga mengurangi kesalahan penciptaan query dinamis. Namun tetap waspada saat menggunakan raw SQL.

3. Validasi dan whitelist input
Validasi panjang, format, dan tipe data. Untuk input yang memiliki format terbatas (mis. ID numerik, kode pos), gunakan whitelist — hanya terima pola yang valid. Validasi bukan pengganti parameterisasi, tetapi lapisan tambahan.

4. Hindari menampilkan error database ke pengguna
Error message yang detail dapat membantu penyerang merancang payload. Tangani error secara generik pada antarmuka publik dan log detailnya secara aman.

5. Gunakan prinsip least privilege untuk akun DB
Akun koneksi aplikasi sebaiknya hanya punya hak yang diperlukan (SELECT/INSERT/UPDATE terbatas). Hindari menggunakan akun DB dengan hak admin untuk aplikasi sehari-hari. 

6. Gunakan Web Application Firewall (WAF) & scanning rutin
WAF dapat membantu menangkal payload umum, dan pemindaian/vulnerability assessment (static/dynamic scans, pentest) membantu menemukan celah sebelum dimanfaatkan. Sisipkan security scan ke dalam SDLC.

7. Audit & monitoring
Catat query abnormal, error yang tak terduga, atau pola akses yang mencurigakan. Logging membantu deteksi dini dan investigasi insiden.

8. Update & patching
Selalu perbarui library, driver DB, dan komponen aplikasi. Kerentanan baru muncul; patch mengurangi eksploitasi terhadap masalah yang sudah diketahui.

SQL Injection adalah salah satu ancaman paling berbahaya dan umum terhadap aplikasi berbasis database. Pencegahan paling efektif adalah parameterized queries, validasi input yang ketat, prinsip least privilege, serta pemindaian dan monitoring rutin. Menggabungkan best-practice ini ke dalam siklus pengembangan akan sangat mengurangi risiko kebocoran data dan kompromi sistem.

Referensi:

1. OWASP — SQL Injection (pengertian & dampak). (OWASP Foundation)

2. PortSwigger — What is SQL Injection? (tutorial & contoh). (PortSwigger)

3. MDN Web Docs — SQL Injection (penjelasan ringkas & best practices). (MDN Web Docs)

4. Acunetix — What is SQL Injection and How to Prevent It (pencegahan & teknik testing). (Acunetix)

5. Microsoft Docs — SQL Server: SQL Injection (panduan mitigasi khusus SQL Server). (Microsoft Learn)

Latest Projects