Lewati ke konten utama

SQL Injection: Cara Kerjanya dan Cara Mencegahnya

Pelajari tentang SQL injection, cara kerjanya, dan cara melindungi sistem Anda dari serangan berbahaya.
Diperbarui 5 Jun 2026  · 8 mnt baca

SQL injection (atau singkatnya SQLi) adalah salah satu trik tertua di buku pegangan peretas, namun masih sangat umum dan sangat berbahaya. Singkatnya, ini tentang mengelabui basis data agar mengungkapkan hal-hal yang seharusnya tidak diungkapkan.

Dalam artikel ini, saya akan menjelaskan apa sebenarnya SQL injection, berbagai cara penyerang menggunakannya, beberapa contoh nyata yang menimbulkan kerusakan serius, dan yang tak kalah penting, bagaimana Anda dapat mencegahnya. Baik Anda seorang pengembang maupun sekadar penasaran tentang bagaimana sesuatu dapat rusak di internet, Anda akan mendapatkan pemahaman yang solid tentang SQLi (tanpa mengantuk di tengah jalan, janji).

Apa Itu SQL Injection? 

SQL injection adalah jenis serangan yang terjadi ketika seseorang menemukan cara untuk mengutak-atik kueri SQL yang dikirim aplikasi Anda ke basis data. Biasanya, kueri tersebut digunakan untuk melakukan hal-hal seperti mengambil profil pengguna atau memperbarui daftar produk. Namun dengan SQLi, penyerang dapat menyuntikkan potongan kode SQL berbahaya ke dalam kolom input Anda (seperti bilah pencarian atau formulir login), dan tiba-tiba basis data melakukan persis apa yang mereka inginkan sebagai gantinya.

Mengapa ini berhasil? 

Karena di suatu titik, aplikasi terlalu mempercayai input pengguna, dan memperlakukannya seperti teks yang tidak berbahaya alih-alih kode yang berpotensi dapat dieksekusi. Ibarat membiarkan seseorang mengisi formulir, lalu menempelkan apa yang mereka tulis langsung ke konsol perintah.

Mengapa ini berbahaya?

SQL injection berbahaya karena dapat digunakan untuk melihat atau mencuri data pribadi (seperti nama pengguna, kata sandi, atau informasi kartu kredit), melewati layar login, menghapus atau memodifikasi data, dan bahkan mengambil alih kendali penuh server basis data dalam skenario terburuk.

Jadi ya, SQLi itu buruk, dan ini bahkan bukan masalah keamanan yang baru, namun Anda akan terkejut melihat berapa banyak aplikasi yang tidak terlindungi dengan benar darinya.

Jenis-Jenis SQL Injection

Tergantung bagaimana penyerang berinteraksi dengan aplikasi Anda dan umpan balik seperti apa yang mereka dapatkan, SQLi hadir dalam beberapa varian. Ada 3 jenis utama yang mungkin Anda temui:

In-band SQLi

Ini yang paling langsung. Penyerang mengirim kueri SQL berbahaya dan mendapatkan hasilnya kembali melalui aplikasi. Cepat, dan sering kali sangat efektif.

  • Error-based SQLi: Teknik ini mengandalkan basis data yang dengan "baik hati" menampilkan pesan galat. Galat ini dapat mengungkap banyak informasi berguna, seperti nama tabel atau struktur kueri, yang memudahkan penyerang merencanakan langkah berikutnya.

  • Union-based SQLi: Di sini, penyerang menggunakan operator UNION untuk menggabungkan kueri mereka sendiri dengan kueri yang dijalankan aplikasi Anda. Ini cara cerdas untuk menarik data ekstra dari basis data dan menyelipkannya ke dalam respons.

Inferential SQLi (alias Blind SQLi)

Yang ini lebih licik. Alih-alih melihat hasil kueri mereka secara langsung, penyerang mengamati bagaimana perilaku aplikasi untuk menebak apa yang terjadi di balik layar.

  • Boolean-based (content-based) SQLi: Penyerang memodifikasi kueri dengan kondisi yang bernilai benar atau salah (seperti 1=1 atau 1=2) dan mengamati bagaimana halaman berubah. Apakah memuat normal? Menampilkan galat? Bertingkah aneh?
  • Time-based SQLi: Teknik ini menambahkan penundaan waktu ke dalam kueri (misalnya WAITFOR DELAY '00:00:05') dan menggunakan waktu respons untuk menyimpulkan apakah suatu kondisi benar.

Out-of-band SQLi (alias saat trik menjadi canggih)

Yang ini lebih jarang, tetapi tetap layak diketahui. Out-of-band SQLi tidak bergantung pada respons langsung dari aplikasi. Sebagai gantinya, penyerang menggunakan saluran alternatif seperti permintaan DNS atau HTTP untuk mengekstrak data. Biasanya digunakan ketika umpan balik langsung tidak memungkinkan tetapi server basis data memiliki akses internet (dan dalam 90% kasus, seharusnya tidak).

Teknik SQL Injection yang Umum

Baik, kita sudah mempelajari 3 jenis SQL injection. Tapi bagaimana penyerang melakukannya dalam praktik?

Serangan OR 1=1

Ini yang klasik. Bayangkan formulir login tempat Anda seharusnya memasukkan nama pengguna dan kata sandi. Penyerang mungkin memasukkan sesuatu seperti ini:

' OR 1=1 --

Kueri SQL akhirnya terlihat seperti:

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

Karena 1=1 selalu benar, basis data mengembalikan semua pengguna, dan -- mengubah sisa kueri menjadi komentar. Jika tidak ada batasan, penyerang bisa saja masuk tanpa mengetahui nama pengguna yang valid.

' OR 1=1 attack

Sumber: vmware

Comment injection

Seperti terlihat di atas, karakter -- atau /* */ digunakan untuk mengomentari bagian pernyataan SQL. Penyerang menggunakannya untuk menghapus klausa tambahan yang mungkin merusak payload yang mereka suntikkan. Misalnya, jika mereka tidak mengetahui struktur lengkap kueri asli, mereka bisa memangkasnya dan membuatnya valid secara sintaksis lagi.

Pernyataan SQL batch

Beberapa basis data mengizinkan beberapa pernyataan SQL dijalankan dalam satu permintaan, dipisahkan oleh titik koma. Fitur ini dapat digunakan peretas untuk melakukan berbagai kerusakan, seperti memodifikasi data atau bahkan menghapus tabel jika aplikasi tidak membatasinya.

'; DROP TABLE users; --

Serangan berbasis UNION

Dengan menyuntikkan pernyataan UNION SELECT , penyerang dapat menggabungkan kueri berbahaya mereka dengan kueri yang sah dan mengambil hasil dari tabel lain seperti data pengguna sensitif, kata sandi, atau info kartu kredit. Intinya, memanfaatkan kueri yang ada untuk mendapatkan data tambahan.

Blind SQL injection

Ini sudah kita sebutkan sebelumnya. Bahkan ketika aplikasi tidak menampilkan galat atau mengembalikan hasil kueri, penyerang tetap dapat mengekstrak data sedikit demi sedikit dengan mengamati perilaku. Lebih lambat dan melelahkan, tetapi berhasil. Ini sering diotomatisasi menggunakan alat yang dapat mencoba ratusan kueri dan respons berbasis waktu.

Stored SQL injection

SQL berbahaya disimpan ke basis data, seperti di profil pengguna atau komentar, dan dieksekusi nanti saat seseorang melihat data tersebut.

Serangan SQL Injection di Dunia Nyata

SQL injection mungkin terdengar seperti hal yang khusus bagi peretas, tetapi selama bertahun-tahun telah menyebabkan kerusakan yang sangat nyata. Dan dengan kerusakan, maksud saya jutaan catatan pengguna terekspos, denda besar, dan tajuk berita yang tidak membantu tim pemasaran mana pun.

Guess.com (2002)

Ini adalah contoh awal yang membuat orang mulai memperhatikan. Seorang peneliti keamanan mengeksploitasi celah SQL injection dan mendapatkan akses ke lebih dari 200.000 catatan pelanggan, termasuk detail kartu kredit. Kabar baiknya, ini ditemukan dan dilaporkan oleh peretas etis. 

Heartland Payment Systems (2009)

Ini adalah pelanggaran besar yang memengaruhi pemroses pembayaran dan 130+ juta nomor kartu kredit dicuri. Penyerang menggunakan SQL injection untuk mendapatkan pijakan, lalu meningkatkan serangan dari sana. Kasus ini sering disebut sebagai salah satu kebocoran data terbesar yang pernah ada.

Yahoo! Voices (2012)

Penyerang mengeksploitasi celah UNION-based SQL injection dan mengekspos 450.000 nama pengguna dan kata sandi teks polos. Ya, Anda membacanya dengan benar, kredensial mentah dibiarkan begitu saja dalam teks polos. Kebocoran itu sangat memalukan karena Yahoo! adalah perusahaan teknologi besar, dan menyimpan kata sandi tidak terenkripsi adalah hal yang sangat “terlarang”, bahkan menurut standar 2012.

TalkTalk (2015)

TalkTalk adalah penyedia telekomunikasi ternama di Inggris yang menjadi korban serangan SQL injection yang cukup dasar. Sekitar 157.000 catatan pelanggan disusupi, dan perusahaan didenda £400.000. Salah satu penyerangnya baru berusia 17 tahun.

Gab (2021)

Aktivis peretas menggunakan SQL injection untuk mengekstrak 70GB data, termasuk kiriman pribadi dan kata sandi yang di-hash. Kebocoran ini sarat muatan politik, dan dampaknya memicu pengawasan lebih jauh terhadap postur keamanan Gab secara keseluruhan.

Cara Mencegah SQL Injection

Baik, setelah sedikit menakut-nakuti diri sendiri dengan semua kebocoran nyata tadi, mari bicara solusi. Kabar baiknya, mencegah SQL injection bukan ilmu roket. Sebagian besar waktunya, ini tentang tidak memercayai input pengguna dan berpegang pada praktik terbaik. Berikut yang dapat Anda lakukan:

Gunakan kueri terparameterisasi

Ini aturan nomor satu. Jangan pernah membangun kueri SQL dengan menempelkan string. Sebagai gantinya, gunakan placeholder dan oper input pengguna sebagai parameter. Sebagian besar framework dan library membuat ini sangat mudah.

Misalnya di Node.js dengan pg (PostgreSQL):

client.query('SELECT * FROM users WHERE id = $1', [userId]);

Ini pada dasarnya memberi tahu basis data, “Ini struktur kuerinya, dan ini beberapa data, tolong jangan dicampuradukkan.”

Gunakan stored procedure secara cerdas

Stored procedure dapat membantu, tetapi hanya jika juga menghindari SQL dinamis. Idenya adalah logika SQL berada di basis data, dan aplikasi Anda hanya memanggil potongan logika yang aman dan telah ditentukan.

Jika Anda ingin belajar membuat, memperbarui, dan mengeksekusi fungsi serta stored procedure, lihat kursus kami Writing Functions and Stored Procedures in SQL Server.

Validasi dan sanitasi input

Jika aplikasi Anda mengharapkan angka, pastikan itu angka. Jangan begitu saja menerima semua yang dimasukkan pengguna. Gunakan pemeriksaan tipe, batasan panjang, dan allowlist (mis., hanya mengizinkan nilai yang sudah diketahui baik) jika memungkinkan.

Melakukan escaping karakter (seperti tanda kutip) juga dapat membantu, namun ini bukan pengganti kueri terparameterisasi.

Gunakan Web Application Firewall (WAF)

WAF dapat bertindak sebagai garis pertahanan pertama, terutama terhadap pola serangan yang sudah dikenal. Ini dapat membantu memblokir sebagian lalu lintas berbahaya sebelum mencapai aplikasi Anda. Bukan solusi sempurna tetapi berguna, sedikit seperti filter spam untuk SQL Anda.

Terapkan prinsip hak akses minimum

Aplikasi web Anda tidak boleh terhubung ke basis data dengan hak admin. Batasi apa yang dapat dilakukan setiap pengguna atau layanan. Misalnya, jika aplikasi Anda hanya perlu membaca data, jangan beri izin untuk menghapus tabel. Semakin kecil kekuatannya, semakin kecil kerusakan yang dapat ditimbulkan injeksi.

Pengujian & Deteksi SQL Injection

Bahkan jika Anda merasa kode Anda aman, ada baiknya mengujinya seperti yang dilakukan penyerang. SQL injection sering lolos dari celah, terutama di basis kode besar atau sistem lama. Ada alat dan teknik yang membuat deteksi jauh lebih mudah dan cukup menyenangkan untuk dicoba.

Pengujian manual

Terkadang cara tercepat menemukan celah adalah dengan langsung mengujinya. Coba masukkan ' OR 1=1 -- or '; DROP TABLE users; -- ke kolom formulir, URL, atau area input lain dan lihat bagaimana reaksi aplikasi. Jika Anda mendapatkan galat aneh, data yang tidak terduga, atau pesan sukses misterius, Anda mungkin menemukan sesuatu yang mencurigakan.

Kiat pro: Selalu uji di lingkungan pengembangan atau staging. 

Pemindai otomatis

Ada banyak alat yang akan melakukan pengujian untuk Anda. Beberapa yang bagus:

  • sqlmap: Alat open-source yang andal untuk mengotomatisasi deteksi dan eksploitasi (dalam konteks pengujian etis).
  • Burp Suite: Hebat untuk keamanan aplikasi web secara umum, dengan ekstensi untuk deteksi SQLi.
  • OWASP ZAP: Gratis dan ramah pemula, dibuat untuk menemukan berbagai kerentanan web.

Alat-alat ini mensimulasikan serangan, menandai potensi titik injeksi, dan terkadang dapat menyarankan perbaikan.

Analisis log

Trik lain yang licik: pantau log basis data Anda. Kueri gagal berulang, pola sintaks aneh, atau lonjakan permintaan dengan ', --, atau UNION SELECT adalah tanda bahaya.

Kesimpulan

SQL injection tidak akan hilang dalam waktu dekat, dan ini salah satu ancaman yang tidak pernah usang. Sederhana, kuat, dan jika Anda lengah, dapat menyebabkan kerusakan serius. Faktanya, SQLi sepenuhnya dapat dicegah. Dengan menggunakan kueri terparameterisasi, memvalidasi input, menerapkan prinsip hak akses minimum, dan melakukan pengujian secara berkala, Anda dapat melindungi aplikasi dan pengguna Anda dari dampak menghancurkan serangan SQL injection. 

Ingat, tidak ada yang menuntut kesempurnaan, tetapi dengan sedikit upaya proaktif, Anda dapat menjaga basis data tetap aman dan mencoret itu dari daftar periksa keamanan Anda. Dan jika Anda serius dengan SQL dan ingin memamerkan keterampilan Anda kepada calon pemberi kerja, lihat SQL Associate Certification kami! Sertifikasi ini akan menunjukkan bahwa Anda mampu menggunakan SQL untuk mengekstrak data yang sesuai dari basis data, dan menggunakannya untuk menjawab pertanyaan data umum.


Marie Fayard's photo
Author
Marie Fayard

Saya adalah tech lead berorientasi produk yang berspesialisasi dalam mengembangkan startup tahap awal dari prototipe pertama hingga mencapai product-market fit dan seterusnya. Saya sangat penasaran dengan cara orang menggunakan teknologi, dan saya senang bekerja erat dengan para founder serta tim lintas fungsi untuk mewujudkan ide-ide berani. Saat tidak membangun produk, saya mencari inspirasi di berbagai penjuru dunia atau melepas penat di studio yoga.

FAQs

Apakah SQL injection dapat digunakan untuk menyerang basis data NoSQL?

SQL injection tradisional tidak berlaku pada basis data NoSQL seperti MongoDB, namun serangan bergaya injeksi serupa dapat terjadi jika input tidak disanitasi dengan benar (seperti injeksi dokumen atau manipulasi kueri)

Bagaimana framework modern membantu mencegah SQL injection?

Banyak framework modern (seperti Django, Laravel, atau Spring) menyertakan perlindungan bawaan seperti lapisan ORM dan parameterisasi otomatis, yang membuat Anda lebih sulit tanpa sengaja menulis kueri yang rentan. Namun Anda tetap harus menggunakannya dengan benar!

Apakah aplikasi seluler juga berisiko terkena SQL injection?

Tentu saja. Jika aplikasi seluler berkomunikasi dengan backend API yang membangun kueri SQL tidak aman berdasarkan input pengguna, aplikasinya sama rentannya meskipun tampilan depannya terlihat terkunci rapat.

Bagaimana penyerang menemukan situs web yang rentan untuk ditargetkan dengan SQL injection?

Mereka sering menggunakan pemindai otomatis atau “Google dorking” (kueri pencarian khusus) untuk menemukan halaman dengan kolom input atau parameter URL yang mungkin bisa dieksploitasi.

Topik

Belajar bersama DataCamp

Kursus

Pengantar SQL

2 Hr
1.6M
Pelajari cara membuat dan mengakses basis data relasional menggunakan SQL dalam waktu hanya dua jam.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow
Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat Lebih BanyakLihat Lebih Banyak