Вы были наполовину на правильном пути. Если вы установите HTML.SafeIframe
на true
и URI.SafeIframeRegexp
на URL-адреса, которые вы хотите принять (%^https://(www.youtube.com/embed/|player.vimeo.com/video/)%
отлично работает), пример ввода:
<p>content...<p>
<iframe src="https://www.youtube.com/embed/blep"></iframe>
<script>alert('abc');</script>
<p>content2</p>
... превращается в ...
<p>content...</p><p>
<iframe src="https://www.youtube.com/embed/blep"></iframe>
</p><p>content2</p>
Объяснение : HTML.SafeIframe
допускает тег <iframe>
, но HTML-очиститель по-прежнему ожидает белый список для URL-адресов, которые может содержать iframe, так как в противном случае <iframe>
открывает слишком большой вредоносный потенциал. URI.SafeIframeRegexp
предоставляет белый список (в форме регулярного выражения, которое необходимо сопоставить).
Посмотрите, работает ли это для вас!
код
Это код, который сделал преобразование, которое я только что упомянул:
$dirty = '<p>content...<p>
<iframe src="https://www.youtube.com/embed/blep"></iframe>
<script>alert(\'abc\');</script>
<p>content2</p>';
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.SafeIframe', true);
$config->set('URI.SafeIframeRegexp', '%^https://(www.youtube.com/embed/|player.vimeo.com/video/)%');
$purifier = new HTMLPurifier($config);
$clean = $purifier->purify($dirty);
Относительно HTML. Надежно
Я умоляю вас никогда не устанавливать HTML.Trusted
на true
, если вы не полностью доверяете всем и каждому из людей, отправляющих HTML.
Помимо прочего, он позволяет формам во входном HTML-коде пережить безупречную очистку, что (если вы очищаете для веб-сайта, которым, как я полагаю, вы являетесь) делает фишинговые атаки тривиальными. Это позволяет вашему вводу использовать теги стиля, которые остаются невредимыми. Есть некоторые вещи, которые он по-прежнему удаляет (любой HTML-тег, о котором HTML Purifier фактически ничего не знает, т.е. большинство HTML5-тегов являются некоторыми из них, также различными обработчиками атрибутов JavaScript), но есть достаточно векторов атаки, которые вы могли бы не стоит очищаться, если вы используете эту директиву. Как однажды сказал Ambush Commander :
Вы не должны использовать% HTML.Trusted в любом случае; это действительно должно быть названо% HTML.Unsafe или что-то.