Searching...
Jumat, 25 Februari 2011

Attack: Script Sanitasi Input


HTML injection, script injection atau apapun istilahnya dari teknik hacking klasik dengan metode  memasukkan kode-kode HTML maupun JavaScript kedalam field input suatu web based application memiliki potensi merusak yang cukup besar apabila tidak ditangani dengan baik...bagi programmer pemula yang tidak banyak mengetahui fungsi-fungsi yang ada tentu akan menjadi masalah yang cukup menyusahkan. Disini saya mengambil contoh penggunaan dengan PHP programming, banyak disediakan fungsi-fungsi untuk mengatasi hal tersebut...misalnya :

* strip_tags, mysql_escape_string, htmlentities dll
* menerapkan aturan regular expresion -> preg_match, ereg, ereg_replace

----// Potensi Kerusakan

Kerusakan yang dapat terjadi sangatlah berbahaya apabila seorang penyerang mengetahui kelemahan dari sanitasi input pada aplikasi web kita, misalnya dengan memasukkan kode-kode HTML dan JavaScript seorang penyerang dapat merubah tampilan dari aplikasi kita ataupun mendirect halaman dari aplikasi kita ke alamat penyerang dan berbagai macam bentuk potensi merusak lainnya.

----// Kelemahan selain HTML injection

Permasalahan lainnya dari sanitasi input adalah penanganan terhadap input dari user berupa karakter tanpa spasi, dengan memasukkan karakter tanpa spasi dalam jumlah yang besar akan menyebabkan rusaknya tampilan aplikasi web kita...tentu hal ini sangat menyebalkan dan kita tidak menginginkan itu terjadi bukan?? :) dan terkadang saya juga ingin sedikit membalas tindakan mereka ;) Setelah kita melakukan sanitasi terhadap kode-kode html maka diperlukan juga sanitasi terhadap input karakter tanpa spasi yang dapat merusak tampilan website kita, sekaligus untuk sedikit memberi pelajaran pada siiseng.. kita buat browser dia untuk looping sebanyak2nya...OK

----// POC (Proof Of Concept)

Disini kita akan membuat sebuah fungsi yang akan digunakan untuk mensanitasi string yang dimasukkan oleh user, apabila string tidak bermasalah/mengandung kode-kode dan maksud yang tidak baik maka data akan diinput kedalam database aplikasi kita sedangkan jika sebaliknya maka fungsi ini akan memfilternya dan mem-bypass ke sebuah script yang akan diterima oleh user yang mengirimkan kode tersebut :)

Langkah-langkahnya adalah sebagai berikut -->>

1. buat file untuk fungsi mengecek komentar/teks input
cekKomen.php
# 1 <?php
# 2
# 3 function komentar($komentar)
# 4 {
# 5 if(!empty($komentar))
# 6 {
# 7 $bersihKomentar = preg_match("/^[a-z0-9. .,.:.-]+$/i", $komentar); // mengijinkan alphanumerik
# 8 $ok = explode(" ",$komentar);
# 9 $jml = count($ok);
# 10 for($i=0;$i<$jml;$i++)
# 11 {
# 12 $hal[$i] = strlen($ok[$i]);
# 13 }
# 14 for($i=0;$i<$jml;$i++)
# 15 {
# 16 if (($hal[$i] > 20) || (!$bersihKomentar)) // asumsi jumlah karakter dari setiap kata > 20 (bisa dirubah)
# 17 {
# 18 $keluar = false;
# 19 break;
# 20 }
# 21 else
# 22 $keluar=true;
# 23 }
# 24 if($keluar==true)
# 25 return $komentar;
# 26 }
# 27 else
# 28 return $komentar;
# 29 if ($keluar==false)
# 30 {
# 31 ?>
# 32 <script>
# 33 var bilangan=1;
# 34 do{
# 35 alert("Kenapa...! Mo coba HAcking Yah...BRoWseR ANda HanG SekAraNG");
# 36 bilangan ++;} # 37 while(bilangan<=1000);
# 38 </script>
# 39 <?
# 40 }
# 41 }
# 42 ?>
--------------------------------------------eof---------------------------------------
----// Penjelasan Script

Baris 3 menyatakan kita membuat sebuah fungsi untuk melakukan sanitasi dari variabel komentar.
Baris 5 membuat suatu kondisi apabila user telah melakukan input data
Baris 7 melakukan sanitasi terhadap string dengan hanya mengijinkan karakter alphanumerik
Baris 8 memecah karakter input berdasarkan spasi
Baris 9 menghitung jumlah kata pada data input utnuk dijadikan parameter dalam melakukan penelusuran
Baris 12 - 22 menghitung jumlah huruf pada setiap kata dan apabila ditemukan jumlah huruf > 20 atau ditemukan karakter yang tidak diijinkan maka akan menciptakan kondisi false, sebaliknya akan menciptakan kondisi true.
Baris 24 - 25 Jika kondisi true maka data yang akan dimasukkan oleh user akan dimasukkan kedalam database apa adanya.
Baris 27 - 38 Jika kondisi false maka fungsi akan mem-bypass input dari user dan mengeksekusi sebuah script yang akan dikirimkan kekomputer klien/user penyerang. Dalam contoh ini saya membuat pada komputer user akan muncul kotak peringatan yang harus diklik 1000 x, dan ini akan membuat browser user tidak berjalan semestinya/hang

----// Implementasi

2. Sertakan file dan fungsi tersebut pada script input kita....
# 1 <?php
# 2 include "connect.php";
# 3 include "cekKomen.php";
# 4
# 5 if(!$submit) {
# 6 ?>
# 7 <form name="form1" method="post" action="">
# 8 <table width="200" border="1">
# 9 <tr>
# 10 <td>Nama</td>
# 11 <td><input name="nama" type="text" id="nama"></td>
# 12 </tr>
# 13 <tr>
# 14 <td>Jabatan</td>
# 15 <td><input name="jabatan" type="text" id="jabatan"></td>
# 16 </tr>
# 17 <tr>
# 18 <tr>
# 19 <td>Komentar</td>
# 20 <td><textarea name="komentar" id="komentar"></textarea></td>
# 21 </tr>
# 22 <td colspan="2"><input name="submit" type="submit" id="submit" value="Submit"></td>
# 23 </tr>
# 24 </table>
# 25 </form>
# 26
# 27 <?php
# 28 } else {
# 29 connect();
# 30 $periksaNama = strip_tags($nama);
# 31 $periksaJabatan = strip_tags($jabatan);
# 32 $periksaKomentar=komentar($komentar); // menyertakan fungsi sanitasi komentar
# 33 $query=mysql_db_query($db, "insert into user (nama, jabatan, komentar) values
# 34 ('$periksaNama', '$periksaJabatan', '$periksaKomentar')");
# 35 if($query){
# 36 echo "Data Berhasil diinput";
# 37 }else{ echo "Data Gagal diinput"; }
# 38 }
# 39 ?>
--------------------------------------------------eof-------------------------------------------
Baris 5 - 25 menampilkan form input dengan variabel-variabel tertentu apabila form dalam kondisi tidak terkirim
Baris 29 - 34 melakukan sanitasi terhadap karakter yang diinput dan memasukkannya kedatabase apabila bersih dari kode maupun input yang tidak baik berdasarkan fungsi yang disertakan.

----// Penutup

Posting ini saya buat sebagai pembelajaran bagi para programmer pemula (termasuk saya) dalam melakukan sanitasi input, serta memberi pelajaran bagi user yang bermaksud tidak baik :).

Saya sengaja memasukkan unsur-unsur fungsi sanitasi sebagai contoh implementasi... serta saya tidak membuat sebuah kode/script yang dapat merusak balik penyerang aplikasi kita, walaupun itu bisa saja dilakukan dengan memasukkan kode-kode exploit maupun virus. Ingat kita bukanlah cracker yang melakukan perusakan.

Algoritma ini dapat diterapkan pada semua jenis scripting programming, tidak hanya sebatas pada PHP...
Saya tidak bertanggung jawab apabila artikel ini disalahgunakan untuk sesuatu yang tidak baik,... :)

0 comments:

Posting Komentar

Like & Share :


Mari budayakan berkomentar baik berupa Kritik, Saran, maupun Pertanyaan untuk menjadikan blog ini lebih baik ke depannya. Copy-Paste di ijinkan, tapi URL sumbernya disertakan.
Terima Kasih.

 
Back to top!