Bu soru burada zaten bir cevabı var:
"Yeter sanitization" iyice bahsettiğini çevre bağlıdır. MySQL için sanitization entirely separate web çıkışı için sanitasyonuyla itibaren düşünülmelidir ve sorunsuz bir sürü önlemek için onları ayrı ayrı ele gerekir.
Sanitizing for MySQL
mysql_real_escape_string()
bir parça veri dezenfekte ve bir SQL sorgusu içine koymak için güvenli yapacaktır.Sanitizing for output
htmlspecialchars($val)
çıktı zamanında, işlenen herhangi bir kötü niyetli etiketleri önlemek çünkü <
ve >
karakter kendi varlık sunumlarını dönüştürülür ve etiket sınırlayıcı olarak işlenmez.<input name="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" />
gibi, bir HTML elemanın alıntı niteliği içeride bir şey çıktısı ise ENT_QUOTES
değiştirici kullanmakÖzel gereksinimleri vardır sürece Yani, ihtiyacınız olan tüm olmalıdır. O kötü oluşturulan HTML ile aldatmasın edilebilir gibi strip_tags()
, gerçekten temizlenmesi için kullanılmamalıdır. Sanitization gereken bir hedef olduğunu ve ayrı ayrı kendi bağlamları tutabilir eğer, aralarında veri işleme ile daha az sorunlar koşacağız.
Bunun yerine strip_tags üzerinde sayma dize htmlentitiesi () () çağırmak için muhtemelen daha güvenli ve daha iyi.
strip_tags () '"&
gibi html özel karakter kaldırmaz
örneğin, kod ise:
<img src="<?= strip_tags($myVar) ?>">
ve
$myVar = '">something goes here<';
o zaman ile sonuna kadar:
<img src="">something goes here<">
Hangi çok açık bir XSS deliğinin köküdür; istismar gerçek bir okuyucu için bir alıştırma olarak bırakılmıştır.
Ben başlangıçta Frank'in cevabı upvoted, ancak bir sorun düşündüm: () Bu ve benzeri yasal adresler kıracak htmlentities:
http://www.mywebsite.com/profile?id=jojo&w=60&h=60
+ Mysql_real_escape belki sıyırma açılı ayraçlar yeterli olur mu?