Мне нужно удалить все теги и атрибуты HTML из пользовательского ввода, кроме тех, которые считаются «безопасными» (т. Е. Подход белого списка).
strip_tags () удаляет все теги, кроме тех, которые перечислены в параметре $allowable_tags
. Но мне также нужно уметь стирать все атрибуты, не включенные в белый список; например, я хочу разрешить <b>
, но я не хочу разрешать атрибут onclick
по понятным причинам.
Есть ли функция, чтобы сделать это, или я должен буду сделать свой собственный?
Насколько мне известно, решение strip_tags
– это самый быстрый способ избавиться от нежелательных тегов и запретить сторонние пакеты, проверка допустимых атрибутов будет довольно простой в DOMDocument,
$string = strip_tags($string,'<b>'); $dom = new DOMDocument(); $dom->loadHTML($string); $allowed_attributes = array('id'); foreach($dom->getElementsByTagName('*') as $node){ for($i = $node->attributes->length -1; $i >= 0; $i--){ $attribute = $node->attributes->item($i); if(!in_array($attribute->name,$allowed_attributes)) $node->removeAttributeNode($attribute); } } var_dump($dom->saveHTML());
Для этого нет никакой функции, поэтому вам, вероятно, придется написать ее. Возможно, регулярное выражение сделает трюк.