Love to live, and live to love

When it can be simple, keep it simple. When it can’t, make it simple!

SQL injection – What is it and a little way how to avoid it

Posted by ardnahc pada 9 Juni, 2009

Latar belakang
beberapa hari yang lalu, ada temen yang situsnya kemasukan orang. Untung aja yang masuknya itu baik, jadi gak diapa2in deh situsnya. Karena temen saya itu bingung gimana cara orang tersebut bisa masuk, akhirnya dia minta bantuan ke saya untuk nyari tau gimana bisa masuk ke situs tsb. Terus dengan ke-sok-tahuan saya, berhasilah saya masuk ke situsnya dengan menggunakan sql injection.

Apa sih sql injection itu?
Sql injection itu adalah cara untuk memasukan sql query (perintah sql) kedalam form yang ada di halaman web. Biasanya form itu dipake untuk login, search, dsb. Bisa juga sih untuk ngelakuin sql injection tanpa harus menggunakan form, yaitu mengubah parameter di address bar yang biasanya menggunakan method GET.
Dengan menggunakan sql injection, seseorang bisa memasukan query yang bisa mencuri, merubah, bahkan menghapus data di situs tersebut.

Contoh:
berikut adalah salah satu potongan kode dari halaman login yang mengambil input dari form.

————————–————————–————————————–

$sql=”SELECT * FROM tbl_user WHERE username= ‘”.$_POST[‘username’].”‘ AND password= ‘”.$_POST[‘password’].”‘”;
$result=mysql_query($sql);
————————–————————–————————–————

Sepintas dari kode tersebut, hanya user yang tau username dan password saja yang bisa masuk ke sistem. tapi sebenarnya, semua orang bisa masuk ke dalam sistem, tanpa harus mempunyai username dan login yang valid.

misalkan seseorang memasukan username “x’ OR ‘x’=’x'” dan password “x’ OR ‘x’=’x'”. lalu sql query yang diexecute akan menjadi seperti berikut

SELECT * FROM tbl_user WHERE username=’x’ OR ‘x’=’x’ AND password=’x’ OR ‘x’=’x’;

dari sql tersebut, siapapun orangnya dan apapun passwordnya, orang tersebut akan berhasil masuk ke dalam sistem.
username=’x’ OR ‘x’=’x’ <—– username apapun yang dimasukan tidak berpengaruh akibat adanya syntax OR ‘x’=’x’, hasilnya akan selalu true. begitu pun passwordnya.

Sekarang akan dibahas contoh dari sql injection yang tidak melalui form, tetapi melalui address bar. Bahkan bila orang tersebut jahat atau jahil, dia bisa melakukan drop database dan semua data di situs tersebut hilang. lihat query berikut:

$sql=”SELECT * FROM product WHERE product_id= ‘”.$_GET[‘product_id’].”‘”;

query tersebut digunakan misalnya untuk menampilkan product yang memiliki product_id tertentu. berikut url dan contoh sql injectionnya.

http://fesbuk.com/product.php?id=10′; DROP TABLE product; —

sql yang akan dijalankan adalah

SELECT * FROM product WHERE product_id=’10′; DROP TABLE product; –‘;

Note: — digunakan sebagai komentar.

mysql akan menerjemahkan perintah tersebut untuk mencari product yang memiliki product_id 10, menghapus table product, dan meng-ignore perintah setelahnya. Bahaya banget kan???

Berikut adalah cara untuk mencegahnya:
1. gunakan maxlength dalam sebuah form. misalnya field username/password tidak lebih dari 20 karakter untuk mencegah seseorang memasukan sql query yang berbahaya.
2. lakukan validasi input seperti pengecekan username, search, email. gunakan fungsi bawaan php isdigit, isnumeric, dll.
3. gunakan fungsi mysql_real_escape_string() pada saat sebelum mengexecute sql query. misalnya:
$username=mysql_real_escape_string($_POST[‘username’]);
$password=mysql_real_escape_string($_POST[‘password’]);

guna fungsi tersebut adalah jika ada seseorang yang memasukan data ‘ OR 1 kedalam form yang akan dikirim, akan diubah menjadi \’ OR 1. Karakter tersebut tidak akan diexecute oleh mysql.

semoga berguna bagi nusa dan bangsa aja deh nih note :p

이 주는 너를 위해 만들었어. 난 널 관계 심각하는것을 가지고싶어. 난 너를 위해 항상 향상하지. ^_^v

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

 
%d blogger menyukai ini: