• 29-11-2013, 20:59:44
    #1
    Merhaba arkadaşlar, php konusunda kendimi geliştirmek adına yeni bazı şeyler yapıp öğrenme aşamasındayım. Takıldığım bir konu var. Aşağıda vereceğim kodlar ile scriptin inc dosyası içerisinde koyup tüm sistemin güvenliğini sağlamak adına bir kod betiği oluşturdum.

    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);
  • 30-11-2013, 19:24:41
    #2
    return trim(htmlspecialchars(addslashes(strip_tags(mysql_real_escape_string($text)))));
    buradaki addslashes ve mysql_real_escape_string fonksiyonları tırnakları \\" bu şekilde yapacaktır. Fazlada bir tane ters slash olması zorun teşkil edebilir.