Apa Itu SQL Injection?
Serangan SQL injection adalah salah satu cyber crime yang jadi ancaman serius keamanan dengan cara menginjeksi kode terhadap celah keamanan database aplikasi atau website. Frekuensi kasus SQL berada di posisi ketiga dengan risiko serangan paling besar. Serangan SQL mencakup pencurian dan manipulasi database, termasuk email, password, data pribadi, bahkan hingga aset finansial. 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 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.
Cara Kerja SQL Injection
Cara kerja serangan SQL injection secara singkat terjadi dalam tiga tahapan, yaitu:
Hacker Mengincar Celah Keamanan Database
Hacker akan mencari celah keamanan pada sebuah website atau aplikasi yang menjadi sasaran. Biasanya, celah keamanan terhadap SQL injection ada pada form loginnya. Selanjutnya, hacker akan menginput kode melalui form login dengan query SQL yang akan diproses database sebagai perintah.
Proses Validasi Atas 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 tanpa mengecek passwordnya. Kemudian sistem akan membiarkan hacker login sebagai korban.
Database Berhasil Diakses
Hacker berhasil masuk ke website tanpa verifikasi. Yang paling berbahaya, hacker bisa mengubah rolenya menjadi administrator website. Hacker dengan mudah bisa 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:
Verifikasi Login bisa Ditembus
Hacker dapat masuk ke website atau aplikasi tanpa perlu login. Peran verifikasi pengguna untuk memfilter akses website bisa mudah dilewati. Kondisi ini sangat membahayakan website yang menjadi sasarannya. Hacker juga bisa mendapatkan informasi pengguna dan menyalah gunakannya untuk aktivitas ilegal. Termasuk, penipuan atas nama pengguna tersebut.
Data Website Dicuri
Hacker bisa mendapatkan akses semua data di 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.
Database Dimodifikasi
Teknik SQL injection juga dapat digunakan untuk mengubah serta menambah data baru pada database. Hal ini berbahaya jika terjadi di website yang memproses transaksi keuangan seperti bank atau toko online. Hacker bisa mengubah data transaksi nasabah, bahkan memindahkan isi rekening nasabah ke rekening lain milik hacker tersebut.
Riwayat Data dari Database Dihapus
Tak ingin aksinya dilacak, hacker dengan akses administrator bisa menghapus keseluruhan data di database. Meskipun sebelumnya database sudah dicadangkan, serangan ini tetap berbahaya sebab selama backup database belum pulih, website atau aplikasi tak dapat berjalan.
OS Command Execution dan Pembobolan Firewall
Beberapa server database memungkinkan akses terhadap operating system (OS). Jika serangan SQL 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
Mengatur Format Form
SQL injection bisa dicegah dengan mengatur jenis karakter yang bisa diinput pada kotak pengisian. Misal, atur agar form nama hanya bisa diisi dengan huruf saja dan form telepon hanya bisa diisi dengan nomor. Batasi jumlah karakter pada form. Misalnya, batasi form nama maksimal 25 karakter. Pembatasan ini mampu mengurangi risiko penulisan kode injeksi SQL pada form pengisian website.
Validasi Input Data
Validasi input umumnya terbagi menjadi dua metode, yaitu whitelisting dan blacklisting.
• Whitelisting – 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 – Kebalikan dari whitelisting, yakni hanya menolak input data yang sudah diketahui buruk atau berbahaya, seperti karakter-karakter tertentu (&, ;, `, ‘, \, “, |, *, ?, ~, <, >, ^, (, ), [, ], {, }, $, \n, dan \r).
Menggunakan Parameterized SQL Query
Penggunaan parameterized query atau prepared statement merupakan teknik sederhana yang terbilang mudah guna mencegah SQL injection. Tujuan metode ini untuk membedakan antara SQL query dengan data input pengguna.
Menggunakan SQL Escape String
SQL Escape String bisa digunakan untuk mencegah masuknya query SQL berbahaya ke database website. SQL Escape String 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.
Mematikan Notifikasi Error
Adanya notifikasi error memudahkan saat proses pengembangan website. Namun, setelah website aktif digunakan, sebaiknya matikan notifikasi error tersebut. Meski fitur notifikasi error memudahkan dalam menemukan kesalahan pada website atau aplikasi yang dikembangkan, penting untuk mematikannya ketika website sudah masuk fase penggunaan. Fitur ini dapat disalahgunakan oleh hacker yang dapat mengetahui celah keamanan website dari error yang dimunculkan. Lalu, bisa leluasa melakukan aksi SQL injection.
Mengamankan Database
Untuk mengamankan database dari serangan SQL injection, inilah beberapa cara yang bisa dilakukan:
1. Mengatur user privilege atau hak akses terhadap database guna membatasi jumlah pengguna yang mampu merubah atau memodifikasi data
2. 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 password-nya
3. Menerapkan enkripsi data pada tabel database guna melindungi username dan password pengguna. Dengan begitu, penyerang tidak mampu mengetahui isi data meskipun berhasil mengaksesnya
4. Mengganti password secara berkala untuk semua akun yang dapat mengakses database.
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 mampu mendeteksi reputasi IP guna mencari IP yang dianggap berbahaya. Selain WAF, bisa juga memasang Intrusion Prevention System (IPS). Lapisan keamanan ini berfungsi memantau traffic pada OS dan jaringan. IPS mendeteksi tiap data dan menentukan yang berbahaya berdasarkan rekam jejaknya. Dengan begitu, komunikasi dan transaksi data tidak sah dapat dicegah.

