HTMLPurifier удаляет выбранные теги - PullRequest
0 голосов
/ 08 июля 2019

Я использую HTMLPurifier для предотвращения xss.HTML содержит все виды тегов, например, SELECT, OPTION.Но HTMLPurifier удаляет теги SELECT, OPTION и сохраняет простой текст.Как я могу разрешить теги SELECT, OPTION.

Вот код

$html = "<select>
       <option value="1" selected>Test 1</option>
       <option value="2" selected>Test 2</option>
</select>";

$config = \HTMLPurifier_Config::createDefault();
$config->set( 'AutoFormat.RemoveEmpty', true );
$purifier = new \HTMLPurifier( $config );
$cleanHtml = $purifier->purify( $dirtyHTML );

Код возврата 'Test 1Test 2'

1 Ответ

1 голос
/ 09 июля 2019

<select> и <option> являются элементами формы. Поскольку формы могут сделать фишинг тривиальным, HTML Purifier с его «безопасным по умолчанию» мышлением даже не удосуживается загрузить определение форм HTML, поэтому вы не можете просто включить формы путем (только) установки HTML.AllowedElements.

Однако настройка HTML.Trusted позволяет вам включать формы, но это позволяет их вообще. Чтобы обсудить изменение поведения, см. тему «Кто-нибудь имеет конфигурацию, разрешающую элементы формы?» на дискуссионном форуме HTML Purifier , например ::

Формам разрешено иметь только пустое действие; они всегда подчиняются себе.

Не по умолчанию: вам придется это кодировать.

Как мне его включить?

Вероятно, самое простое - скопировать и вставить определения из HTMLPurifier/HTMLModule/Forms.php, а затем настроить их соответствующим образом. Обратите внимание, что эти определения предполагают наличие доверенных пользователей, поэтому, пожалуйста, внимательно проверьте все поля, которые вы разрешаете.

...