Я использую HTML-очиститель для дезинфекции ввода пользователя. У меня настроен список разрешенных элементов, что означает, что любой тег, который не включен в разрешенный список, лишен. Код ниже:HTML-очиститель - исключить запрещенные теги вместо удаления
require_once "HTMLPurifier.standalone.php";
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.AllowedElements', array('strong','b','em','i'));
$purifier = new HTMLPurifier($config);
$safe_html = $purifier->purify($dirty_html));
Вместо того, чтобы только сохранить их содержимое, я хотел бы элементы, которые не включены в список, чтобы быть экранированы и отправлен обратно в виде текста.
В качестве иллюстрации, учитывая белый список показано выше, следующий входной строки:
<a href="javascript:alert('XSS')"><strong>CLAIM YOUR PRIZE</strong></a>
превращается в "<strong>CLAIM YOUR PRIZE</strong>"
, потому что a
не в белом списке. Аналогичным образом,
<b>Check the article <a href="http://example.com/">here</a></b>
будет "<b>Check the article here</b>"
.
Есть ли способ, чтобы включить вышеупомянутые два примера в следующий:
<a href="javascript:alert('XSS')"><strong>CLAIM YOUR PRIZE</strong></a>
<b>Check the article <a href="http://example.com/">here</a></b>
чисто путем изменения конфигурации HTML очистителя в , не прибегая к регулярным выражениям на основе «писаки»? Если есть, то я хотел бы знать, как это делается.