Teknik Scripting Mencegah SQL Injection di PHP

Posted by Nicki Hermanto Putro On Wednesday 27 February 2013 0 komentar
Halo agan dan aganwati semua. Apa kabarnya? Sebelumnya saya pernah membahas apa itu SQL injection. Kali ini saya memposting mekanisme melakukan SQL Injection dan mencegahnya. Perlu diketahui bahwa ini hanyalah pembelajaran semata dan tidak boleh digunakan untuk hal-hal yang bersifat merusak dan melanggar hukum. Serangan SQL injection seakan tidak ada matinya. Tiap hari selalu saja ada situs yang terkena serangan ini. Semoga para hacker yang melakukan injection ini 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. 
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,0x3a,pass,0x3a,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,0x3a,pass,0x3a,email) from users –’. Apabila id ini dicasting ke dalam integer maka akan dihasilkan id = 10, dengan cara memberikan perintah id = (int) $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

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

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

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… sekian tipsnya. Mudah-mudahan bermanfaat buat Anda.Trims.

Sumber:
http://blog.rosihanari.net/teknik-scripting-mencegah-sql-injection-di-php       diakses Rabu, 27 Pebruari 2013, 22:20 WIB.   

0 komentar:

Post a Comment

Silahkan isi komentar dengan baik dan sopan, tidak mengandung unsur SARA, provokatif, dan tanpa SPAM / iklan. Pesan / Komentar yang tidak layak akan dihapus. Terimakasih.