Kullanıcıların / Filtre Yorumlar sterilize için en iyi yolu?

5 Cevap php

I am currently using this process to Sanitize/Filter comment entered by users ->
This one is used to strip slashes... and

 if (get_magic_quotes_gpc()) {
        function stripslashes_deep($value)
        {
            $value = is_array($value) ?
                        array_map('stripslashes_deep', $value) :
                        stripslashes($value);

            return $value;
        }

        $_POST = array_map('stripslashes_deep', $_POST);
        $_GET = array_map('stripslashes_deep', $_GET);
        $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
        $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
    }

Ardından açıklama verileri sterilize bu işlev geçer ...

   function my_strip_tags($str) {
            	$strs=explode('<',$str);
        		$res=$strs[0];
        	    for($i=1;$i<count($strs);$i++)
        	    {
        			if(!strpos($strs[$i],'>'))
        				$res = $res.'&lt;'.$strs[$i];
        	        else
                    	$res = $res.'<'.$strs[$i];
        		}
        	 return strip_tags($res);   
    }

Bundan sonra hazırlanmış deyimi kullanarak düz veritabanına gider ..

function add_comment($comment,$type,$update_id,$user_id){
    		$query="INSERT INTO comment_updates (updateid,userid,comment) VALUES(?,?,?)";
    			if($stmt=$this->conn->prepare($query)) {
    			$stmt->bind_param('sss',$update_id,$user_id,$comment);
    			$stmt->execute();
    				if($this->conn->affected_rows==1){
    				$stmt->close();
    				return true;
    				}
    		}
    	}

Bu veya başka iyi alternatifler onların ise ... Teşekkürler yeterince güvenli olup olmadığını bilmek istedim

5 Cevap

Kendi HTML Dezenfektan yazmayın. XSS açıkları oluşturabilir edeceğiz.

Eğer kendi yazmak için gidiyoruz eğer, en azından ha.ckers.org xss smoketests buna karşı çalıştırın

Ve neden profesyonellere bırakmak gerekir - bu testler ve arasındaki htmlpurifier comparison of filters, size karmaşık html sanitization ne kadar iyi bir fikir almak gerekir.

Bir veritabanına veri depolama düşünmeye en önemli şey, onu kaçmak için; kullanılarak mysql_real_escape_string , or mysqli_real_escape_string , or PDO::quote , depending on the DB you're using (or other functions for oracle/pg/...)

Başka bir çözüm ;-) senin yerinde kaçan verileri ile uğraşmak, hangi ( -- those are not supported by the old mysql_* uzantısı and/or PDO::prepare mysqli::prepare bakınız) hazırlanmış deyimleri kullanmak olacaktır


When thinking about HTML output, you have two solutions :

Ben ilk veya son çözüm ya gitmek istiyorum; seninki daha "tehlikeli" hissediyor - ama bu sadece bir duygu ^ ^ (the general idea being "do not reinvent the wheel") bulunuyor

Taşıma sihirli tırnak gayet iyi, her ne kadar sen de anahtarları stripslashes gerekir tırnak ile parametreleri almak oluşturursanız. :)

Şerit etiketleri gibi, gerçek bir HTML filtre kütüphane ile daha kapalı. Pek çok katlanmış ve sadece size sadece bir kez yapmak ve unutmak şey güven olmamalıdır html ile ilgili döner. İnsanlar bu HTML filtreler böylece sizin yararınıza işlerini kullanmak için zaman harcamak.

"Düz DB içine" gelince, iyi bir bağlı parametreleri, emin, bu harika. Sen güvenle ilişkili bir parametre içine bir şey koyabilirsiniz. Tırnak ile bir dize, ben size sonucu kaçan umuyoruz.

Veritabanında puting zaman tüm karakterleri Escape. Almak ve bu <sometag> olarak html biçimlendirme kaçmak için emin olun görüntüleniyor böylece yerine kodu olarak tedavi olma görüntüler.

PHP az bilinen ama sanitasyon fonksiyonları güçlü inşa etti. Ben bunları kullanarak öneriyoruz:

Input filtering in PHP

filter_input ve filter_var