Apa Itu SQL Injection? Cara Kerja, Contoh, dan Pencegahan

Lu buka halaman login sebuah website. Di kolom username, lu ketik admin' OR 1=1 --. Di kolom password, lu ketik asal. Klik login — dan lu masuk ke admin panel. Tanpa password. Tanpa brute force. Cuma pake satu baris teks.

Itu SQL Injection — dan sampe hari ini, ini masih jadi salah satu serangan paling umum dan paling berbahaya di dunia web. OWASP (Open Worldwide Application Security Project) konsisten masukin SQL injection ke Top 10 vulnerability setiap tahunnya.

SQL Dulu, Baru Injection

Sebelum ngerti SQL injection, lu harus ngerti dulu apa itu SQL. SQL (Structured Query Language) itu bahasa yang dipake buat ngomong sama database. Hampir semua website yang punya fitur login, search, atau form — di belakangnya ada database, dan database itu diakses pake SQL.

Contoh: lu login ke sebuah website. Di balik layar, server nge-run query kayak gini:

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

Query ini nyari di tabel users, ada ga baris yang username-nya “admin” DAN password-nya “rahasia123”. Kalo ada, lu berhasil login. Kalo ga ada, login gagal. Simpel kan?

Nah masalahnya, kalo developer ga handle input user dengan benar, hacker bisa manipulasi query itu.

Gimana SQL Injection Bekerja?

Bayangin form login yang code-nya kayak gini (ini contoh yang SALAH):

SELECT * FROM users WHERE username = '[INPUT_USER]' AND password = '[INPUT_PASSWORD]';

Developer langsung masukin input lu ke dalam query tanpa filter. Sekarang, kalo lu masukin ini di kolom username:

admin' OR 1=1 --

Query-nya jadi:

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

Apa yang terjadi?

  • admin' — menutup string username
  • OR 1=1 — kondisi yang SELALU true
  • -- — comment, semua setelah ini diabaikan (termasuk pengecekan password)

Hasilnya? Query return SEMUA user di database, dan lu login sebagai user pertama — biasanya admin.

NORMAL LOGIN FLOW
==================

User input: admin / rahasia123
     |
     v
Query: SELECT * FROM users WHERE username='admin' AND password='rahasia123'
     |
     v
Database: cek ada ga --> ada --> LOGIN BERHASIL
                     --> ga ada --> LOGIN GAGAL


SQL INJECTION FLOW
===================

User input: admin' OR 1=1 -- / (kosong)
     |
     v
Query: SELECT * FROM users WHERE username='admin' OR 1=1 --' AND password=''
     |
     v
Database: 1=1 selalu TRUE --> return SEMUA rows --> LOGIN BERHASIL (tanpa password)

Jenis-Jenis SQL Injection

SQL injection ga cuma satu jenis. Ini yang paling umum:

In-Band SQLi (Classic) — Hasil serangan langsung keliatan di response halaman. Ini yang paling gampang dan paling sering ditemuin.

  • Error-Based — Lu sengaja bikin query error, terus error message-nya ngasih info soal struktur database. Contoh: lu tau nama tabel, nama kolom, bahkan versi database dari error message.
  • Union-Based — Lu pake UNION SELECT buat gabungin hasil query lu sama query asli. Bisa extract data dari tabel lain yang seharusnya ga bisa lu akses.
' UNION SELECT username, password FROM users --

Blind SQLi — Hasil serangan ga langsung keliatan. Lu harus “tanya” database lewat kondisi true/false.

  • Boolean-Based — Lu kirim query yang hasilnya true atau false, terus liat perbedaan response-nya. Misalnya, kalo true halaman normal, kalo false halaman error.
  • Time-Based — Lu pake SLEEP() atau WAITFOR DELAY. Kalo query true, response-nya delay X detik. Kalo false, response langsung. Lu extract data satu karakter per satu karakter.
' OR IF(SUBSTRING(database(),1,1)='a', SLEEP(5), 0) --

Kalo response delay 5 detik, karakter pertama nama database itu ‘a’. Lama? Iya. Tapi bisa di-automasi pake tools kayak SQLMap.

Out-of-Band SQLi — Data dikirim lewat channel yang berbeda, misalnya DNS lookup atau HTTP request ke server lu. Jarang terjadi tapi bisa very effective di environment tertentu.

Dampak SQL Injection

Ini bukan cuma “login tanpa password.” SQL injection bisa:

  • Extract seluruh database — Semua username, password, email, data kartu kredit, data pribadi
  • Bypass authentication — Login sebagai siapa aja tanpa credentials
  • Modify data — Insert, update, atau delete data di database
  • Read file dari server — Di MySQL, LOAD_FILE() bisa baca file sistem
  • Execute command di server — Di beberapa kasus, SQL injection bisa lead ke Remote Code Execution (RCE)
  • Takeover server — Dari RCE, hacker bisa full control server lu

Kasus real: tahun 2023, MOVEit Transfer vulnerability (SQL injection) dipake kelompok Cl0p buat nyerang ribuan organisasi sekaligus, termasuk pemerintahan dan perusahaan Fortune 500.

Cara Mencegah SQL Injection

1. Parameterized Queries (Prepared Statements) — Ini solusi UTAMA. Jangan pernah concatenate input user langsung ke query SQL.

Yang SALAH:

query = "SELECT * FROM users WHERE username = '" + username + "'"

Yang BENER:

query = "SELECT * FROM users WHERE username = %s"
cursor.execute(query, (username,))

Dengan prepared statement, input user di-treat sebagai DATA, bukan sebagai bagian dari SQL command. Mau lu masukin ' OR 1=1 -- pun, database nganggep itu literal string, bukan SQL syntax.

2. Input Validation — Whitelist karakter yang boleh diinput. Username harusnya cuma alphanumeric? Tolak semua karakter spesial.

3. Escape Special Characters — Kalo terpaksa ga bisa pake prepared statement, minimal escape karakter berbahaya kayak '"\--.

4. Least Privilege Database User — App lu ga perlu connect ke database pake akun root/admin. Bikin user database khusus dengan permission minimum.

5. WAF (Web Application Firewall) — Layer tambahan yang bisa detect dan block common SQL injection patterns. Tapi jangan rely 100% ke WAF — ini pertahanan tambahan, bukan pengganti secure coding.

6. Error Handling — Jangan tampilin database error message ke user. Error message yang detail bisa kasih info berharga ke attacker soal struktur database lu.

DEFENSE CHECKLIST
==================

[1] Prepared Statements     ---> WAJIB. Non-negotiable.
[2] Input Validation        ---> Filter karakter berbahaya
[3] Least Privilege DB User ---> App ga pake akun root
[4] WAF                     ---> Layer pertahanan tambahan
[5] Error Handling          ---> Jangan expose DB errors
[6] Regular Pentest         ---> Test sebelum hacker yang test

Tools Buat Testing SQL Injection

Kalo lu mau belajar atau testing (di environment yang LEGAL):

  • SQLMap — Automasi SQL injection dari detection sampe data extraction. Open source, powerful banget.
  • Burp Suite — Intercept HTTP request, manipulasi parameter, test manual SQL injection.
  • OWASP ZAP — Alternative gratis dari Burp Suite buat web app security testing.
  • Havij — GUI-based SQL injection tool, lebih gampang buat pemula (tapi outdated).

Semua tools ini bisa lu praktekin di lab LINUXENIC — environment yang aman dan legal buat belajar exploit SQL injection tanpa nyerang website orang.

Belajar SQL Injection Hands-On

Teori udah lu dapet dari artikel ini. Sekarang waktunya praktek. Di LINUXENIC, ada lab khusus buat SQL injection dan web hacking:

Lu bakal dapet target web yang sengaja vulnerable, terus tugas lu: exploit SQL injection-nya, extract data, dan dapetin flag. Langsung di browser, ga perlu setup apa-apa.

FAQ

“SQL injection masih relevan di 2026?” — Sangat. Walaupun framework modern udah handle ini secara default, masih banyak legacy code, custom queries, dan developer yang ga aware. OWASP masih masukin injection attacks ke Top 10.

“Bisa kena hukum ga kalo praktekin SQL injection?” — Kalo lu test di website orang tanpa izin, IYA. UU ITE Pasal 30 bisa jerat lu sampe 8 tahun penjara. Makanya belajar di platform yang legal kayak LINUXENIC — environment yang sengaja dibuat buat di-hack.

“Harus bisa SQL dulu ga?” — Basic SQL cukup. Lu harus ngerti SELECT, WHERE, UNION, ORDER BY, dan LIMIT. Ga perlu jadi database admin. Di path Cyber Security 101 ada materi SQL Fundamentals buat yang belum tau sama sekali.

“SQLMap bisa detect semua jenis SQL injection?” — Hampir semua, tapi ga 100%. Ada kasus edge yang butuh manual testing. Makanya penting belajar manual dulu sebelum rely ke tools.

Penutup

SQL injection itu serangan yang udah ada lebih dari 20 tahun — dan masih efektif sampe sekarang. Bukan karena serangannya canggih, tapi karena masih banyak developer yang ga handle input user dengan bener.

Kalo lu mau jadi pentester, web hacker, atau security engineer — SQL injection itu skill fundamental yang wajib lu kuasain. Bukan cuma tau teorinya, tapi bisa exploit dan bisa prevent.

Berhenti baca, buka lab, dan coba sendiri.

root@yournickname# _
LINUXENIC{fUn_w1th_cyb3r53cur1ty!}
To top

Verify Your Identity

The verification code expires in -

Please enable one or more of the options below: