Mengenal SQL Injection dan Cara Mencegahnya
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:
- Hacker mengincar celah keamanan database
- Proses validasi atas SQL Query yang digunakan
- Database berhasil diakses
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 budikeren dan password budi123 di sebuah website. Ketika pengguna ini melakukan login, website akan melakukan validasi dengan query SQL berikut:
SELECT * FROM users WHERE username = ‘budikeren’ AND password = ‘budi123’
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 = ‘budikeren’--’ 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.
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.
Mengkhawatirkan, ya? Adakah cara menanganinya?
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:
- Mengatur user privilege atau hak akses terhadap database guna membatasi jumlah pengguna yang mampu merubah/memodifikasi data.
- Melakukan pemisahan data kredensial yang bersifat vital, seperti tabel username dan password. Dengan demikian, apabila hacker mendapatkan akses ke username, belum tentu mereka dapat mengakses tabel passwordnya.
- Menerapkan enkripsi data pada tabel database guna melindungi username dan password pengguna. Dengan begitu, penyerang tidak mampu mengetahui isi data meskipun berhasil mengaksesnya.
- Mengganti password secara berkala untuk semua akun yang dapat mengakses database.
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.
Comments
Post a Comment