- Pengantar
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
12
website kita, sekaligus untuk sedikit memberi pelajaran pada siiseng..
kita buat browser dia untuk looping sebanyak2nya...
- 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
Artikel 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...
- Referensi
1. Web Hacking: Serangan dan pertahanannya - Stuart McClure
2. Writing Security Tools and Exploits - James C. Foster ; Vincent Liu
3. Hackers Handbook - Auzy_build011
4. Professional PHP Programming - Jesus Castagnetto ; Harish Rawat dkk
4. www.forum.mercubuana.it.org
5. Ezine from Echo.or.id
Related Posts: