Jenis serangan ini menimbulkan banyak kerugian akibat rusaknya database situs web atau aplikasUntuk 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 di-filter dengan benar dalam pembuatannya, sehingga terciptalah celah yang bisa disalahgunakan.
Injeksi SQL dilakukan dengan memodifikasi perintah SQL pada form input aplikasi, sehingga pelaku bisa mengirimkan sintaks 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 injeksi SQL cukup sederhana, yaitu dengan menyalahgunakan celah keamanan pada lapisan database.
Injeksi SQL 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.
Singkatnya, teknik ini dijalankan melalui form username. Form username seharusnya diisi menggunakan karakter saja, tapi form tersebut bisa diisi dengan karakter lain. Dengan begitu, hacker bisa menyematkan karakter kontrol SQL seperti (:;-,=’) dan kata kunci perintah yang dapat merusak tatanan database. Alhasil, hacker mampu memasukkan kueri SQL injection dan website telah berhasil diretas.
#Cara Mencegah SQL Injection
Untuk menghindari serangan injeksi SQL, 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:
a.) Memastikan validasi input yang kuat menggunakan regular expression sebagai whitelist untuk data terstruktur (seperti nama, usia, pendapatan, respons survei, kode pos).
b.) 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.
Berikut ini menunjukkan bagaimana melakukan validasi tablename:
"switch ($tableName) {
case 'fooTable': return true;
case 'barTable': return true;
default: return new BadMessageException('unexpected value provided as table name');
}"
Untuk drop-down list, sangat mudah untuk memvalidasi data. Misalnya, jika kamu ingin pengguna memilih rating dari 1 hingga 5, ubah kode PHP menjadi seperti ini:
"<?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:
a.) Input harus dalam bentuk angka
b.) Mengharuskan $number lebih besar dari 0 dan lebih kecil dari 6, sehingga memiliki kisaran 1-5.
#Gunakan 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 injeksi SQL. 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 kueri 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 injeksi SQL:
"<?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 dan 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 injeksi SQL.
#Memasang WAF dan IPS
Selain hal-hal di atas, kamu dapat terlindung dari serangan injeksi SQL dengan meningkatkan keamanan jaringanmu. Salah satunya dengan memasang WAF dan IPS. Apa itu ?
a.) 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 injeksi SQL.
b.) 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.
#Lindungi Aplikasimu dari SQL Injection Sekarang !
SQL injection adalah bentuk serangan siber pada aplikasi web dengan menyalahgunakan celah keamanan lapisan database. Sekarang kamu sudah mengetahui apa itu SQL injection, bagaimana serangan siber ini bekerja dan beberapa tips cara mencegah injeksi SQL pada aplikasimu.
Tidak ada komentar:
Posting Komentar