function xap ($in, $format=false) {
if ($format == 'html') {
//Делаем безопасный html
$in = preg_replace('/(<(link|script|iframe|object|applet|embed).*?>[^<]*(</(link|script|iframe|object|applet|embed).*?>)?)/i', '', $in); //Удаляем стили, скрипты, фреймы и flash
$in = preg_replace('/(script:)|(expression()/i', '\1 ', $in); //Обезвреживаем скрипты, что остались
$in = preg_replace('/(onblur|onchange|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup|onload|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onreset|onselect|onsubmit|onunload)=?/i', '', $in);
$in = preg_replace('/((src|href).*?=.*?)(http://)/i', '\1redirect/\2', $in);
return $in;
} else {
return htmlentities($in);
}
}
echo xap($text); //for read
echo xap($text, "html"); //for read html tags
作者说这是保护XSS的理想代码...是真的吗?
htmlentities()
将保护您免受XSS的侵害。
您的代码看起来也希望允许一些 HTML 代码。您仍应运行htmlentities()
在此运行后str_replace()
允许您需要的一些 html 标记。
htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
应该足够安全
http://php.net/manual/en/function.htmlspecialchars.php
你忘记了错误。 => <img src="http://idontexists.neke/notexists.jpg" onerror="alert(document.cookie)" />