Вот мой код:
// to make tags stable, wrap them into <html> tag
$post_content_html = "<html>".$html."</html>";
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML(mb_convert_encoding($post_content_html, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//@*');
foreach ($nodes as $node) {
if($node->nodeName != "src" && $node->nodeName != "href" && $node->nodeName != "alt") {
$node->parentNode->removeAttribute($node->nodeName);
}
}
$post_content_html = $dom->saveHTML($dom->documentElement);
// To strip <html> tag which been wrapped
$post_content_html = preg_replace('/^<html>/', '', $post_content_html);
$post_content_html = preg_replace('/<\/html>$/', '', $post_content_html);
Как видите, мой код удаляет атрибуты src
, href
и alt
. Но, тем не менее, мой клиент не защищен от атак XSS, так как пользователи могут также вводить тег <script>
(включая некоторые коды js внутри). Любая идея, как я могу избежать тега script
?