Proteksi Website dari Serangan SQL Injection

Buat: 01/27/2013 - 21:51
Proteksi Website dari Serangan SQL Injection

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 sintak DML(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 atau mysql_real_escape_stringNamun 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 karakter back slash ( \ )

Demikianlah tutorial singkat dari saya mengenai Proteksi Website dari Serangan SQL Injection.

regards 

hafizh a.k.a junior.riau18

 

About Author

Tentang PHP Indonesia

PHP Indonesia adalah sebuah komunitas untuk semua orang yang mencintai PHP. Fokus utama kami adalah pemrograman menggunakan bahasa PHP, namun tidak menutup kemungkinan pembahasan yang mencakup keseluruhan LAMP stack. Topik bisa dari pemrograman PHP, penanganan memcached, optimasi database, konfigurasi server, tuning server web, application deployment, framework PHP, hosting pilihan dan sebagainya.

Petunjuk Penulisan

Berikut ini adalah beberapa petunjuk penulisan artikel. Petunjuk dibuat bukan untuk membatasi tetapi demi menjaga kualitas artikel yang terpublikasi di situs ini. Selain itu, keseragaman gaya bahasa dapat menjaga readibilitas (tingkat keterbacaan) sehingga pembaca akan lebih nyaman dalam membaca artikel di situs ini.