Bu betikte amacım, injection ve FILES ile yüklenebilir Shell dosyalarıyla birlikte diğer zararlı dosyaların önüne geçmek. Temel anlamda ileride birebir her GET, POST ve SESSION kontrolleri yapmaktansa girişte bu kontroller ile güvenlik kontrol sağlamak istedim.
Siz değerli ustadlarıma sormak istediğim konu, aşağıdaki kod betiğinden sonra herhangi bir açık oluşabilir mi ve betik içerisine ek güvenlik kontrolleri konulabilir mi ?
error_reporting(0);
function filesfilter($text) {
$i = pathinfo($text['name']);
$resimkontrol ="/jpg|png|jpeg|gif/i";
if(preg_match($izinverilenler,$i['extension'])) {
list($width, $height) = getimagesize($text['tmp_name']);
if(empty($width)){
echo 'width alınamadı! dur yolcu!'; exit;
}
}
$engellenecekler ="/.php|.php3|.asp|.txt|.exe|.zip|.rar|.gz|.jsp|.aspx|.phps|.php2|.php4|.php5|.cgi|.tmp|.xml/i";
if(preg_match($engellenecekler,$text['name'])) {
echo 'zararlı dosya yükleme teşebbüsü. dur yolcu!'; exit;
}
$izinverilenler ="/.swf|.jpg|.png|.jpeg|.unity3d|.dcr|.gif/i";
if(preg_match($izinverilenler,$text['name'])) {
return $text;
} else {
echo 'izin verilen dışında dosya yükleme teşebbüsü. dur yolcu!'; exit;
}
}
function getfilter($text) {
if(preg_match('/http/',$text) or preg_match('/.php/',$text)){
echo 'dur yolcu!'; exit;
}
return trim(htmlspecialchars(addslashes(strip_tags(mysql_real_escape_string($text)))));
}
function filter($text) {
return trim(addslashes(mysql_real_escape_string($text)));
}
$_GET = array_map('getfilter',$_GET);
$_POST = array_map('filter',$_POST);
$_COOKIE = array_map('getfilter',$_COOKIE);
$_SESSION = array_map('getfilter',$_SESSION);
$_FILES = array_map('filesfilter',$_FILES);