Bu, ihtiyacınız (örneğin <body>
ve </body>
arasına veya <div>
ve </div>
arasında olduğu gibi), HTML içeriği koymak olacak varsayarsak 5 özel bir XML karakterleri kodlamak için (&, <,>, ", '), ve OWASP çizgi (/) gibi. PHP yerleşiğini dahil önerir, htmlentities()
will do the first part for you, and a simple str_replace()
a> çizgi yapabilirsiniz:
function makeHTMLSafe($string) {
$string = htmlentities($string, ENT_QUOTES, 'UTF-8');
$string = str_replace('/', '/', $string);
return $string;
}
Ancak, böyle bir <a
, o zaman farklı bir dizi kodlamak gerekir ve href=
fıkra gibi bir HTML niteliğine, içine kusurlu değerini koyarak gidiyoruz karakter ([boşluk]% * +, - /; <=> ^ ve |) ve çift tırnak HTML niteliklerini gerekir:
function makeHTMLAttributeSafe($string) {
$scaryCharacters = array(32, 37, 42, 43, 44, 45, 47, 59, 60, 61, 62, 94, 124);
$translationTable = array();
foreach ($scaryCharacters as $num) {
$hex = str_pad(dechex($num), 2, '0', STR_PAD_LEFT);
$translationTable[chr($num)] = '&#x' . $hex . ';';
}
$string = strtr($string, $translationTable);
return $string;
}
Nihai endişe yasadışı UTF-8 karakter-zaman bazı tarayıcılarda teslim, bir kötü şekillendirilmiş UTF-8 bayt dizisi bir HTML işletmenin patlak verebilir. Bu karşı korumak için, sadece size olsun tüm UTF-8 karakter geçerli olduğundan emin olun:
function assertValidUTF8($string) {
if (strlen($string) AND !preg_match('/^.{1}/us', $string)) {
die;
}
return $string;
}
Bu düzenli ifadeye u
değiştirici bir Unicode eşleşen regex yapar. Tek bir chararchter eşleştirerek, .
, biz tüm dize geçerli Unicode emin konum.
Bu tüm bağlam-bağımlı olduğundan, kullanıcıya çıktı sunmadan önce son mümkün an-sadece bu kodlama birini yapmak en iyisidir. Bu uygulamada olmak da kolay kaçırdığınızı herhangi bir yerleri görmek için yapar.
OWASP onların XSS prevention cheat sheet hakkında bilgi büyük bir sağlar.