Menurut OWAPS (2011) SQL injection adalah suatu teknik penyerangan yang memasukkan atau “menginjeksi” sebuah query SQL melalui input data dari klien ke aplikasi.

SQL adalah interpreted language dan aplikasi berbasis web umumnya menyusun statemen SQL tersebut digabungkan dengan input data yang diberikan oleh pengguna. Jika langkah tersebut tidak dilakukan dengan cara yang aman, kemungkinan besar aplikasi akan memiliki celah SQL injection. (Stuttard, 2011)

Perhatikan query berikut, query tersebut digunakan untuk proses pencarian sebuah record pada tabel user. Dimana jika record ditemukan maka asumsi dari aplikasi adalah query valid.

SELECT * FROM user WHERE username='admin' AND password='pas123'

Data username dan password diambil dari inputan yang diberikan oleh pengguna. Sekilas tidak ada yang salah dari struktur query diatas. Namun apabila username yang dimasukkan adalah admin’— maka query tersebut akan menjadi:

SELECT * FROM user WHERE username='admin'--' AND password='pas123'

Dalam SQL tanda “—” berarti komentar jadi karakter setelah tanda tersebut otomatis akan diabaikan. Pada akhirnya query yang dimasukkan username admin’— sama saja dengan query berikut:

SELECT * FROM user WHERE username='admin'

Sehingga jika pada tabel user terdapat username dengan nama “admin” maka query tersebut valid dan pasti mengembalikan record.

Salah satu klausa SQL yang juga sangat sering digunakan untuk menggali data memanfaatkan celah SQL injection adalah UNION. Klausa UNION digunakan untuk menggabungkan dua atau lebih hasil dari statemen SELECT kedalam satu hasil. Untuk memperjelas penggunaan UNION dalam SQL injection penulis mengilustrasikan penggunaan sebuah tabel bernama produk dan beberapa perintah untuk mengambil informasi-informasi server MySQL.