Belakangan ini, kejahatan di dunia maya atau cybercrime semakin meningkat. Dari berbagai bentuk ancaman yang ada, SQL injection adalah salah satu bentuk serangan terhadap aplikasi web yang sering ditemukan. Faktanya menurut penelitian organisasi yang bergerak di bidang keamanan software OWASP, SQL injection masuk dalam urutan ketiga risiko keamanan terbesar pada aplikasi web.
Jenis serangan ini menimbulkan banyak kerugian akibat rusaknya database situs web atau aplikasi. Untuk tahu lebih lanjut apa itu SQL injection dan bagaimana cara menghindarinya, baca penjelasan berikut yuk!
Apa itu SQL Injection?
SQL injection adalah teknik penyalahgunaan celah keamanan pada lapisan database sebuah aplikasi. Ancaman cybercrime ini bisa terjadi karena adanya input yang tidak difilter dengan benar dalam pembuatannya, sehingga terciptalah celah yang bisa disalahgunakan.
SQL injection dilakukan dengan memodifikasi perintah SQL pada form input aplikasi, sehingga pelaku bisa mengirimkan syntax atau query ke database aplikasi.
Dengan begitu, hacker dapat melihat data yang tidak seharusnya mereka lihat termasuk data milik pengguna lain, atau data lain yang dapat diakses oleh aplikasi itu sendiri. Di beberapa kasus, pelaku dapat memodifikasi atau menghapus data tersebut sehingga dapat menyebabkan perubahan pada konten atau aplikasi.
Cara Kerja SQL Injection
Hingga saat ini, SQL injection masih menjadi teknik favorit yang dilakukan para hacker untuk melakukan peretasan web atau aplikasi. Hal ini karena pada dasarnya, cara kerja SQL injection cukup sederhana, yaitu dengan menyalahgunakan celah keamanan pada lapisan database.
SQL injection dapat terjadi karena ada celah keamanan. Celah ini terbentuk akibat para developer tidak mengaktifkan filter untuk meta karakter pada form input di aplikasi, sehingga hacker akhirnya bisa menggunakannya untuk menulis command SQL di form login/input.
Cara Mencegah SQL Injection
Untuk menghindari serangan SQL Injection, kamu bisa melakukan tindakan pencegahan seperti berikut:
Mengatur input validation
Ibarat melihat siapa yang mengetuk sebelum membuka pintu, input validation membantu mengecek perintah apa pun yang dimasukkan ke dalam string input sebelum diproses.
Proses validasi bertujuan untuk memverifikasi jenis input yang dikirimkan oleh pengguna diperbolehkan atau tidak. Dengan begitu, hanya value yang lolos validasi yang dapat dijalankan.
Validasi seharusnya tidak hanya diterapkan pada bidang yang dapat dimasukkan input. Kamu juga perlu menerapkan hal yang sama seperti :
- Memastikan validasi input yang kuat menggunakan regular expression sebagai whitelist untuk data terstruktur (seperti nama, usia, pendapatan, respons survei, kode pos).
- Untuk set value yang tetap (seperti daftar drop-down, tombol radio, dsb.), tentukan value mana yang dikembalikan. Data yang diinput harus sama persis dengan salah satu opsi yang ditawarkan.
switch ($tableName) {
case 'fooTable': return true;
case 'barTable': return true;
default: return new BadMessageException('unexpected value provided as table name');
}
<?php
if(isset($_POST["selRating"]))
{
$number = $_POST["selRating"];
if((is_numeric($number)) && ($number > 0) && ($number < 6))
{
echo "Selected rating: " . $number;
}
else
echo "The rating has to be a number between 1 and 5!";
}
?>
Dengan begitu, kamu sudah melakukan dua validasi yaitu:
- Input harus dalam bentuk angka
- Mengharuskan $number lebih besar dari 0 dan lebih kecil dari 6, sehingga memiliki kisaran 1-5.
Menggunakan Parameterized Queries
Parameterized queries adalah sarana untuk melakukan pra-kompilasi statement SQL, sehingga nantinya kamu dapat menyediakan parameter agar statement dapat dieksekusi. Metode ini memungkinkan database untuk mengenali kode dan membedakannya dari data input.
Gaya pengkodean ini membantu mengurangi serangan SQL injection. Input dari pengguna secara otomatis diquoted dan tidak akan menyebabkan perubahan tujuan.
Disarankan untuk menggunakan parameterized queries dengan PHP 5.1 saat bekerja dengan database. Library PHP Data Objects (PDO) mengadopsi metode untuk menyederhanakan penggunaan query berparameter. Selain itu, hal ini membuat kode lebih mudah dibaca dan portabel karena beroperasi pada beberapa database, bukan hanya MySQL.
Kode ini menggunakan PDO dengan parameterized queries untuk mencegah kerentanan SQL injection :
<?php
$id = $_GET['id'];
$db_connection = new PDO('mysql:host=localhost;dbname=sql_injection_example', 'dbuser', 'dbpasswd');
//preparing the query
$sql = "SELECT username FROM users WHERE id = :id";
$query = $db_connection->prepare($sql);
$query->bindParam(':id', $id);
$query->execute();
//getting the result
$query->setFetchMode(PDO::FETCH_ASSOC);
$result = $query->fetchColumn();
print(htmlentities($result));
?>
Memisahkan Database Username & Password
Kamu dapat melakukan cara ini untuk mengatasi serangan SQL injection pada aplikasi. Dengan memisahkan database username dan password, maka pelaku penyerangan membutuhkan usaha dan percobaan lebih karena harus memahami struktur database aplikasi.
Hal ini juga berguna untuk mengantisipasi apabila ada 1 database yang terekspose, maka database-database lainnya dapat terlindungi.
Memasang Filter Untuk Input Metakarakter
Memasang filter input metakarakter adalah salah satu cara mengatasi ancaman SQL injection. Mengimplementasikan filter terhadap metakarakter (&, ;, `, ‘, \, “, |, *, ?, ~, <, >, ^, (, ), [, ], {, }, $, \n, dan \r) berguna untuk mencegah input pada form isian pengguna yang bisa dimanfaatkan untuk melakukan serangan SQL injection.
Memasang WAF & IPS
Selain hal-hal di atas, kamu dapat terlindung dari serangan SQL injection dengan meningkatkan keamanan jaringanmu. Salah satunya dengan memasang WAF dan IPS. Apa itu?
- Web Application Firewall (WAF) menciptakan shield / pelindung antara aplikasi web dan internet untuk meminimalisir berbagai serangan yang mungkin terjadi. WAF membantu melindungi aplikasi web dengan cara memfilter dan memantau lalu lintas HTTP antara aplikasi web dan internet. Firewall ini melindungi aplikasi web dari serangan seperti pemalsuan lintas situs, cross-site scripting (XSS), dan SQL injection.
- Intrusion Prevention System (IPS) adalah bentuk network security yang berfungsi untuk mendeteksi dan mencegah ancaman yang diidentifikasi. Sistem pencegahan intrusi ini akan memantau jaringan kamu, mencari kemungkinan terjadinya insiden berbahaya dan mencatat informasi tentangnya.
Penutup
Demikianlah penjelasan tentang SQL Injection. Semoga artikel ini bermanfaat untuk Anda yang ingin menambah wawasan terkait SQL Injection, ya!
Posting Komentar