Apa Itu SQL Injection?
SQL injection adalah sebuah langkah injeksi kode
terhadap celah keamanan database sebuah
aplikasi atau website.
Umumnya, hacker menggunakan perintah atau query SQL dengan tools tertentu
untuk mengakses database. Injeksi kode yang dilakukan membuat mereka dapat
masuk tanpa proses otentikasi.
Setelah berhasil, hacker bebas untuk menambahkan,
menghapus, serta mengubah data-data pada website.
Serangan SQL injection ini dapat menarget website
apapun yang menggunakan SQL database, seperti MySQL,
Oracle, SQL Server, dan sebagainya.
Umumnya, SQL injection terjadi ketika pengelola
website tidak memasang firewall atau sistem keamanan lainnya. Namun, bagaimana
sebenarnya cara kerja SQL injection?
Cara Kerja SQL Injection
Cara kerja serangan SQL injection secara singkat
terjadi dalam tiga tahapan, yaitu:
Berikut ini penjelasan lengkapnya:
1. Hacker Mengincar Celah Keamanan Database
Pertama-tama,
penyerang akan mencari celah keamanan pada sebuah website atau aplikasi yang
menjadi sasaran. Biasanya, celah keamanan terhadap SQL injection ada pada form
loginnya.
Selanjutnya,
penyerang akan menginput kode melalui form login dengan query SQL yang akan
diproses database sebagai perintah.
Sebagai
contoh, seorang pengguna memiliki username belajarquery dan password query123
di sebuah website. Ketika pengguna ini melakukan login, website akan melakukan
validasi dengan query SQL berikut:
SELECT * FROM users WHERE username = ‘belajarquery’ AND password = ‘query123’
Jika
query yang dikirim memberikan detil login pengguna, maka loginnya berhasil.
Jika tidak, maka loginnya ditolak atau gagal.
Yang
terjadi pada sebuah serangan SQL injection adalah penyerang dapat melakukan
login tanpa menggunakan password dengan SQL Comment Sequence menggunakan
simbol double minus (–).
Query
yang terkirim pun berubah seperti berikut:
SELECT * FROM users WHERE username = ‘belajarquery’--’ AND password = ‘ ’
Jika
query yang dikirim memberikan detil login pengguna, maka loginnya berhasil.
Jika tidak, maka loginnya ditolak atau gagal.
Yang
terjadi pada sebuah serangan SQL injection adalah penyerang dapat melakukan
login tanpa menggunakan password dengan SQL Comment Sequence menggunakan
simbol double minus (–).
Query
yang terkirim pun berubah seperti berikut:
SELECT * FROM users WHERE
username = ‘belajar’--’ AND password = ‘ ’
2.
Proses Validasi Atas SQL Query SQL
yang Digunakan
Query
SQL di atas membuat database melakukan proses validasi perintah. Hasilnya,
database akan memberikan informasi login dari pengguna yang memiliki
username budikeren tanpa mengecek passwordnya. Kemudian,
sistem akan membiarkan penyerang login sebagai budikeren.
3.
Database Berhasil Diakses
Penyerang
berhasil masuk ke website tanpa verifikasi. Yang paling berbahaya, penyerang
bisa mengubah rolenya menjadi administrator website.
Kalau
sudah begitu, penyerang bisa dengan mudah mengakses, memodifikasi, dan bahkan
menghapus semua data pribadi pengguna website tersebut.
Wah,
berbahaya juga ya kalau itu sampai terjadi? Benar, dan dampak berbahaya dari
sebuah serangan SQL injection cukup banyak. Apa saja?
Dampak Berbahaya dari SQL Injection
Berikut adalah beberapa dampak berbahaya dari
serangan SQL injection:
1.
Verifikasi Login bisa Ditembus
Dengan
SQL injection, penyerang dapat masuk ke website/aplikasi tanpa username dan
password yang valid. Artinya, peran verifikasi pengguna untuk memfilter akses
website bisa mudah dilewati. Kondisi ini tentu sangat membahayakan website yang
menjadi sasarannya.
2.
Privasi Pengguna Website Terancam
Tak
hanya bisa mengakses website tanpa login, pelaku SQL injection juga dapat
melakukan login sebagai pengguna lain, tergantung teknik yang digunakan.
Dengan
kondisi ini, hacker bisa mendapatkan informasi pengguna dan menyalahgunakannya
untuk aktivitas ilegal. Termasuk, penipuan atas nama pengguna tersebut.
3.
Data Website Dicuri
Aksi
SQL injection dengan query SELECT dan OUTPUT, membuat penyerang bisa
mendapatkan akses atas semua data di tabel database targetnya. Misalnya,
username, password, pin rekening bank, dan kredensial lainnya.
Dengan
akses terhadap informasi sensitif di atas, data pelanggan, data pribadi, serta
dokumen rahasia perusahaan pun dapat dicuri.
4.
Database Dimodifikasi
Teknik
SQL injection juga dapat digunakan untuk mengubah serta menambah data baru pada
database. Hal ini sangat berbahaya kalau terjadi di website yang memproses
transaksi keuangan seperti bank atau toko
online.
Hacker
bisa saja mengubah data transaksi nasabah, bahkan memindahkan isi rekening
nasabah ke rekening lain milik hacker tersebut.
5.
Riwayat Data dari Database Dihapus
Tak
ingin aksinya dilacak, penyerang dengan akses administrator bisa menghapus
keseluruhan data pada database.
Meskipun
sebelumnya database sudah dicadangkan di cloud, serangan ini tetap berbahaya.
Sebab, selama backup database belum dipulihkan, website atau aplikasi tidak
dapat berjalan.
6.
OS Command Execution dan Pembobolan
Firewall
Beberapa
server database memungkinkan akses terhadap operating system (OS). Jika
serangan SQL injection berhasil mengakses OS, artinya hacker mampu menyerang
jaringan internal yang ada di balik firewall dengan OS Command Execution.
Singkatnya,
SQL injection tak hanya berbahaya sebagai serangan tunggal, tapi juga membuka
kemungkinan serangan berbahaya lainnya.
Cara Mencegah SQL Injection
Anda sudah tahu dampak berbahaya dari serangan SQL
injection, bukan? Inilah cara mencegah SQL injection yang bisa Anda lakukan:
1. Mengatur Format Kotak Pengisian
Anda
bisa mencegah terjadinya SQL injection dengan mengatur jenis karakter yang bisa
diinput pada kotak pengisian. Misal, aturlah agar form nama hanya bisa diisi
dengan huruf saja. Sedangkan, form nomor telepon hanya bisa diisi dengan nomor.
Selain
itu, Anda juga bisa membatasi jumlah karakter pada kotak pengisian. Misalnya,
batasi form nama maksimal 25 karakter. Pembatasan ini mampu mengurangi risiko
penulisan kode injeksi SQL pada form pengisian website Anda.
2. Validasi Input Data
Validasi
input umumnya terbagi menjadi dua metode, yaitu whitelisting dan blacklisting.
·
Whitelisting – Merupakan metode
penyaringan data dengan hanya menerima input data yang sudah dipastikan aman.
Input data yang berada di luar daftar whitelist ini akan
otomatis ditolak.
·
Blacklisting – Merupakan kebalikan
dari whitelisting, yakni hanya menolak input data yang sudah
diketahui buruk atau berbahaya, seperti karakter-karakter tertentu :
(&, ;, `, ‘, \, “, |, *, ?, ~, <, >,
^, (, ), [, ], {, }, $, \n, dan \r).
Anda
bisa menerapkan salah satu ada atau keduanya sekaligus untuk menyaring data
yang bisa diproses website Anda.
3. Menggunakan
Parameterized SQL Query
Penggunaan parameterized
query atau prepared statement merupakan teknik
sederhana yang terbilang mudah guna mencegah SQL injection.
Tujuan
dari metode ini adalah untuk membedakan antara SQL query dengan
data input pengguna. Contoh sederhananya adalah dengan kode berikut:
PreparedStatement
statement = connection.prepareStatement("SELECT
* FROM products WHERE category = ?");
statement.setString(1,
input);
ResultSet
resultSet = statement.executeQuery();
Kode
di atas membuat perintah query SELECT dan WHERE dibaca sebagai data biasa.
Jadi, meskipun penyerang menuliskan perintah query pada kotak input, query
tersebut tidak akan mampu mengubah struktur query website/aplikasi Anda.
4.
Menggunakan SQL Escape String
Anda
bisa menggunakan SQL Escape String untuk mencegah masuknya query SQL berbahaya
ke database website.
SQL
Escape String sendiri adalah rangkaian kode yang berfungsi menambahkan karakter
escape, yakni mengubah satu karakter yang dianggap berbahaya (‘) menjadi
karakter lain (\’). Misalnya SQL injec’tion menjadi SQL
injec\’tion.
$kar = “SQL injec’tion”;
$filter =
mySQL_escape_string($kar);
echo”Hasil filter :
$filter”;
Kode
di atas akan merubah karakter (‘) dan menunjukkan pesan Hasil filter : SQL
injec\’tion. Dengan begitu, query SQL yang dimasukkan tidak akan terbaca
sebagai perintah yang berbahaya.
5.
Mematikan Notifikasi Error
Adanya
notifikasi error memudahkan Anda saat proses pengembangan website. Namun,
setelah website aktif digunakan, sebaiknya matikan notifikasi error tersebut.
Meski
fitur notifikasi error memudahkan dalam menemukan kesalahan website/aplikasi
yang dikembangkan, tapi penting untuk mematikannya ketika website sudah masuk
fase penggunaan.
Pasalnya,
fitur ini dapat disalahgunakan oleh hacker. Hacker dapat mengetahui celah
keamanan website dari error yang dimunculkan. Lalu, bisa leluasa melakukan aksi
SQL injection.
6.
Mengamankan Database
Untuk
mengamankan database dari serangan SQL injection, inilah beberapa cara yang
bisa dilakukan:
7. Menggunakan
WAF dan IPS
Pemasangan Web
Application Firewall (WAF) dapat menyaring potensi serangan SQL
injection serta serangan siber lainnya. WAF akan mencocokan query yang masuk
dengan daftar query SQL berbahaya yang selalu terupdate.
Beberapa
WAF terbaru kini juga mampu mendeteksi reputasi IP guna mencari IP yang
dianggap berbahaya.
Selain
WAF, Anda juga bisa memasang Intrusion Prevention System (IPS).
Lapisan keamanan ini berfungsi memantau traffic pada OS dan
jaringan.
IPS
akan mendeteksi tiap data yang berseliweran dan menentukan apakah ada yang
berbahaya berdasarkan rekam jejaknya. Dengan begitu, IPS dapat mencegah
komunikasi dan transaksi data yang tidak sah.