"Injection" disini maksud gw adalah, teknik injeksi script yang di
lakukan melalui address bar. SQL Injection, RFI, dan XSS. soalnya tw gw
cuma itu. hehe
wlo kagak jago,bukan master, jelek, tp biarin. gak ada batasan buat share. ahag ahag
Tidak ada system yang aman 100%. Tetapi kita bisa mengupayakan
semaximal mungkin system kita aman. Gak tau seberapa persen. Walo 1%
pun, sangat berharga untuk sebuah keamanan. Coding berikut, hanya seper
xxxxxx persen. But semoga berguna.
Beberapa baris program berikut, intinya buat memparsing, validasi, or
filter variable-variable yang di kirim melalui address bar
($_GET['namavar']) secara otomatis. seberapa banyak pun variable, akan
tetep di filter.
Jd variable yg mau di filter, tidak perlu di definisikan terlebih
dahulu, karena program udah di buat otomatis buat filter semua variable
yg di lewatkan dengan methode GET.
langsong yagh pak
- Code:
-
/* global config
tambahkan karakter yg km anggap berbahaya disini
*/
$xssinjectionchars = array("%3Cscript%3E","%3C/script%3E");
$sqlinjectionchars = array("-","*","/","'","\\""," ","=","+","(",")","@","%20","%");
//batasi hanya variable ini yang akan di filter
$registeredrequests = array("page","cat","id");
/* function */
function securitycheck(){
global $registeredrequests;
$REQUESTS = $_SERVER['QUERY_STRING'];
$REQUESTS = explode("&",$REQUESTS);
for($i=0; $i< count($REQUESTS); $i++){
$get = substr($REQUESTS[$i],0,(strpos($REQUESTS[$i],"=")));
$val = substr($REQUESTS[$i],(strpos($REQUESTS[$i],"=")+1),strlen($REQUESTS[$i]));
if(in_array($get,$registeredrequests)){
$val = antixssinjection($val);
$val = antisqlinjection($val);
$val = rficleaner($val);
$_GET[$get]=$val;
}
}
}
//filter sql
function antisqlinjection($cek){
global $sqlinjectionchars;
for($i = 0; $i <= strlen($cek); $i++){
if(!in_array(substr($cek,$i,1),$sqlinjectionchars)) { $filtered .= substr($cek,$i,1);}
}
for($i = 0; $i < count($sqlinjectionchars); $i++){
$filtered = str_replace($sqlinjectionchars[$i],"",$filtered);
}
return $filtered;
}
//filter rfi
function rficleaner($cek){
$filtered = ((eregi("^(http:).+",$cek))?'index':$cek);
return $filtered;
}
//filter xss
function antixssinjection($cek){
global $xssinjectionchars;
for($i = 0; $i < count($xssinjectionchars); $i++){
$filtered = str_replace($xssinjectionchars[$i],"",$cek);
}
return $filtered;
}
penjelasan config.
$xssinjectionchars adalah karakter2 yang di anggap sebagai xss
injection. disini masih tak masukan dan .
$sqlinjectionchars adalah karakter2 yang di anggap sebagai sql injection. misalnya -, +, dll.
Karakter2 bisa di tambahkan sendiri sebanyak yg di ketahui.
$registeredrequests merupakan variable2 valid yang memang ada dan di
perlukan di website. variable yang tidak di daftarkan disini, akan
dilewatkan dalam pengecekan dan di hapus.
Penjelasan alurnya program.
contoh :
http://websiteku.com/?page=about&news_id=51. Ambil semua variable yang di kirim melalui methode get.
$REQUESTS = $_SERVER['QUERY_STRING'];
Menghasilkan => /?page=about&news_id=5
2. Variable2 tersebut masih berbentuk string. pisahkan berdasarkan tanda "&".
$REQUESTS = explode("&",$REQUESTS);
step ini menghasilkan $REQUESTS dalam bentuk array. masing2 array, berbentuk layaknya sebuah variable dikirim.
$REQUESTS[0] = page=about
$REQUESTS[1] = news_id=5
3. Mulai filter.
a. Hitung jumlah $REQUESTS. kemudian lakukan pengulangan untuk mengecek.
for($i=0; $i< count($REQUESTS); $i++){ ... filterisasi .... }
b. Pisahkan nilai masing2 $REQUESTS menjadi 2 bagian berdasarkan tanda "=". [nama var]=[value var]
$get = substr($REQUESTS[$i],0,(strpos($REQUESTS[$i],"=")));
$val = substr($REQUESTS[$i],(strpos($REQUESTS[$i],"=")+1),strlen($REQUESTS[$i]));
c. Dek apakah variable terdaftar ($registeredrequests)
Mungkin ada yg bertanya, mengapa harus mendaftarkan variable terlebih dahulu, bukankah variable di cek secara otomatis.
Iya, memang. tp hal ini penting, karena kalau dibiarkan, klo ada orang
tau codingnya, maka bisa jadi ddos bagi server hanya dengan membuat
variable yang sangat banyak.
if(in_array($get,$registeredrequests))
Jika variable terdaftar, maka lakukan pengecekan. jika tidak, maka hapus variable tersebut.
d. Do filter
Seip, lakkukan filterisasi terhadap xss-i,sqli,rfi pada value variable.
filter dilakukan dengan menghilangkan karakter2 yg di anggap berbahaya
(sesuai config). sehingga nilai yang di hasilkan benar2 bersih dari
karakter yg di anggap berbahaya.
$val = antixssinjection($val);
$val = antisqlinjection($val);
$val = rficleaner($val);
e. Rubah value variable yg dikirim dengan value variable yg lolos filter.
$_GET[$get]=$val;
Seip.... udah selese. Coding gw ini msh terlalu jelek. Karena kemampuan
gw emang segitu. Mgkn sobat migworld punya solusi lain untuk lebih
menyempurnakanya. Or mungkin klo di temukan bug, bisa di fix.
n, teknik penyempurnaanya + bug fix nya, kita bahas disini sekalian de sob.
Semoga berguna buat kita semua.
oiya, ketinggalan.
cara pakainya, tinggal include tuh script. terserah mo di taruh campur
function2 km, km taruh page sendiri, km taruh di halaman km, terserah.
cara pakainya tetep sama :
letakan code berikut di halaman yg mo di cek. di atas sob, sebelum proses di mulai.
securitycheck();