Home > Hacking, PHP, Tutorial > Teknik Scripting Mencegah SQL Injection di PHP

Teknik Scripting Mencegah SQL Injection di PHP

Serangan SQL injection seakan tidak ada matinya. Tiap hari selalu saja ada situs yang terkena serangan ini. Namun… semoga para hacker yang melakukan injection ini pada baik-baik semua. Mereka tidak hanya sekedar membobol, namun juga diharapkan memberitahukan kelemahan sistem situs pada si webmaster dan juga tidak mengacak-acak isi situs.

SQL injection merupakan teknik yang dilakukan para hacker untuk masuk ke sebuah sistem atau situs dengan memberikan perintah atau query SQL melalui metode GET atau POST memanfaatkan kelemahan sistem. Kelemahan sistem di sini bisa berasal dari script atau programnya sendiri atau dari dalam server.

Pada kesempatan ini saya akan coba bahas bagaimana teknik scripting untuk mencegah SQL injection melalui GET method. Artikel ini merupakan request dari mas Rosid (member saya). Anyway.. thanks mas atas requestnya, karena hal ini membuat saya harus belajar dan cari akal sebelum membuat postingan ini :-)

OK… sebelum saya menulis postingan ini, saya sempatkan sebentar untuk mencari informasi seputar teknik-teknik yang biasa dilakukan untuk SQL injection ini. Setelah browsing beberapa saat… akhirnya saya menemukan beberapa artikel teknik SQL injection yang dijelaskan sangat detail. Selain itu saya juga iseng-iseng cari tutorial videonya. Dari yang saya temukan, ada banyak teknik SQL injection yang bisa dilakukan. Namun, dalam hal ini saya batasi pembahasan hanya pada teknik SQL injection melalui GET method atau melalui URL.

Biasanya, serangan SQL injection yang dilancarkan ke sebuah situs korban melalui URL berparameter, misalkan seperti ini:

http://situskorban/artikel.php?id=10

URL di atas memiliki parameter id dan biasanya diikuti dengan angka tertentu. Angka ini menunjukkan nomor id dari artikel yang sedang tampil.

Hanya dengan menambahkan beberapa query SQL di belakang parameter tersebut, seorang hacker mampu mengakses database yang digunakan oleh situs tersebut. Berikut ini salah satu contoh query yang diinjectkan melalui URL berparameter

http://situskorban/artikel.php?id=10 union all select 1,concat(user,0x3a,pass,0x3a,email) from users --

Seorang hacker dalam melancarkan aksinya, biasanya butuh beberapa kali submit URL dan query sebelum akhirnya mendapatkan targetnya.

Nah… sekarang saya akan paparkan sedikit tentang bagaimana menghindari injection seperti halnya di atas. Point pentingnya di sini adalah bagaimana supaya parameter hanya bisa membaca nomor unik id dari artikelnya saja, dengan mengabaikan query yang disisipkan hacker. Atau dengan kata lain bagaimana supaya parameter yang berisi query injection dihilangkan, misal apabila diberikan URL berikut ini

http://situskorban/artikel.php?id=10 union all select 1,concat(user,0x3a,pass,0x3a,email) from users --

akan menjadi

http://situskorban/artikel.php?id=10

(bagian ‘union all select 1,concat(user,0×3a,pass,0×3a,email) from users –’ diabaikan)

OK… untuk menghilangkan query yang disisipkan pada parameter dalam URL, kita bisa menggunakan ‘teknik casting’. Dalam hal ini, kita mengcasting nilai parameter ke dalam tipe data integer. Sebagai contoh, misalkan kita memiliki sebuah string id = ‘10 union all select 1,concat(user,0×3a,pass,0×3a,email) from users –’. Apabila id ini dicasting ke dalam integer maka akan dihasilkan id = 10, dengan cara memberikan perintah id = (int) $id.

<?php
 
$id = "10 union all select 1,concat(user,0x3a,pass,0x3a,email) from users --";
$id = (int) $id;
echo $id;
 
?>

Script di atas akan menghasilkan 10.

Nah… pada URL http://situskorban/artikel.php?id=…, biasanya dalam script artikel.php ini, pastilah di dalamnya terdapat perintah berikut

<?php
 
$id = $_GET['id'];
 
/* script untuk menampilkan artikel dengan id tertentu*/
 
?>

Perintah $id = $_GET[‘id’]; digunakan untuk membaca nilai parameter id-nya untuk kemudian ditampilkan artikelnya berdasarkan id tersebut. Nah.. teknik casting di atas dapat diterapkan pada script artikel.php ini

<?php
 
$id = (int) $_GET['id'];
 
/* script untuk menampilkan artikel dengan id tertentu*/
 
?>

Lebih baik lagi, kalau kita tambahkan function absolut abs()

<?php
 
$id = abs((int) $_GET['id']);
 
/* script untuk menampilkan artikel dengan id tertentu*/
 
?>

Mengapa perlu ditambahkan abs()? ya… karena ada pula teknik SQL injection yang memanfaatkan ‘negative number’ pada parameter URLnya, misalkan

http://situskorban/artikel.php?id=-10 union all select 1,concat(user,0x3a,pass,0x3a,email) from users --

Di sini, function abs() hanya untuk menjamin saja bahwa nilai parameter id adalah bernilai positif.

Oya… Teknik di atas dapat juga diterapkan pada POST method melalui form.

OK… demikian tipsnya. Mudah-mudahan ada manfaatnya buat Anda. Oya… disamping teknik pencegahan dapat dilakukan dari sisi scripting seperti yang telah saya paparkan di atas, terdapat pula teknik pencegahan dari sisi server yang justru lebih disarankan. Salah satunya adalah dengan memberikan pengamanan web server (Apache) dengan mod_security.

Categories: Hacking, PHP, Tutorial
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: