Berbicara soal
internet, tidak jauh - jauh dari sebuah website yang diakses. Berbicaara
tentang website, tidaklah jauh dari pembicaraan mengenai konten yanga ada,
bagaimana membuatnya, bagaimana sekuritasnya, dan sebagainya. Kali ini akan
dibahas mengenai "Bagaimana memproteksi website kita dari serangan SQL
Injection Attack."
SQL Injection?
Apa itu? Ya, beberapa dari kita para developer web sudah mendengar hal ini,
bahkan seorang yang bukan developer web pun juga mengetahuinya. SQL Injection
merupakan salah satu teknik serangan terhadap sebuah situs atau website.
Serangan ini memanfaatkan kesalahan perintah SQL yang dikirimkan dari web ke
database server untuk dieksekusi oleh databaseserver.
Pada umumnya sintak SQL yang sering dipakai pada proses
developing atau pembuatan sebuah situs iyalah sintakDML(Data
Manipualtion Language) yakni INSERT, UPDATE dan DELETE. Pada umumnya sintak yang dikirim seperti
ini
select * from `tblBerita` where `id` = 10
10 didapat dari hasil parsing
parameter url
http://www.website.com/index.php?id=10
maka pada penulisan
sintak php akan menjadi seperti ini
$SQL="select * from `tblBerita` where
`id` = '".$_GET['id']."'";
pada proses eksekusi normal sintak tersebut, database server akan
memberikan balikan hasil sesuai yang parameter yang dikirimkan. Namun bila kita
meracuni parameter yang dikirim melalu url dengan sebuah karakter khusus yaitu
single quote ( ' ) seperti ini
http://www.website.com/index.php?id=10'
maka SQL query tersebut tidak akan bisa di eksekusi dan database
server akan memberikan balikan berupa pesan error seperti berikut
#1064 - You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right
syntax to use near ''' at line 1
mengapa? karena SQL
yang dikirimkan ke database adalah seperti ini
select * from `tblBerita` where `id` ='10''
perhatikan setelah
nilai 10 terdapat dua buah single quote. Hal ini lah yang menyebabkan error,
dan hal ini lah yang mejadi celah sebuah situs dan dengan mudah di eksploitasi
dengan metode SQL Injection.
Nah, bagaimana kita
mengatasi hal ini? Ya, caranya adalah dengan melakukan sanitasi pada data yang
dikirimkan dari url.
PHP sendiri telah menyediakan method khusus untuk menangani hal
ini, yaitu mysql_real_escape ataumysql_real_escape_string. Namun kita
juga bisa membuat sebuah method khusus untuk mengerjakan hal ini, yang penting
tujuannya adalah untuk sanitasi data yang dikirimkan.
Saat penggunakan
method itu maka sintak pengiriman SQL Query ke database server akan menjadi
seperti ini
$SQL="select * from `tblBerita` where `id` = '".mysql_real_escape_string($_GET['id'])."'";
dan querynya akan
mejadi seperti ini bila ada penambahan single quote pada url
select * from `tblBerita` where `id`='10'\'
dengan demikian, database hanya akan membaca 1 singel quote
didepan angka 10 dan 1 single quote dibelakang angka 10, sedangkan 1 karakter
single quote tambahan dibelakang angka 10 akan terabaikan karena adanya
karakterback slash ( \ ).
Demikianlah tutorial
singkat dari saya mengenai Menangkal Website dari Serangan SQL Injection.
0 comments:
Post a Comment