HTMLPurifier без htmlspecialchars

Я использую HTMLPurifier для простого Tinymce WYSIWYG Если я не использую htmlspecialchars , будет ли он открыт для XSS Attack ? Это то, что я делаю

 $detail = $purifier->purify($detail); 

для очистки данных для этого textarea htmlspecialchars Если я использую htmlspecialchars , он также htmlspecialchars все базовые теги, которые не являются удобными для WYSIWYG Но проблема заключается в том, что это позволяет также использовать <script> tag .

И если я изменил conf setting на

 $config->set('ExtractStyleBlocks.1', true); 

Он не позволяет использовать < и > для <script> tag .Convert < и > для <script> Но это показывает <p>This is paragraph</p> , <strong>This text is bold</strong> и поэтому on.It не должен показывать <p> and other simple tags пользователю, а только текст.

Как я могу избавиться от этой проблемы.

Пожалуйста, помогите. Спасибо за ваше время.

редактировать

Вот моя инициализация HTMLPurifier

 $config = HTMLPurifier_Config::createDefault(); //$config->set('ExtractStyleBlocks', true); $config->set('HTML.ForbiddenElements', array('script','style','applet')); $purifier = new HTMLPurifier($config); 

получение данных из базы данных

 while(mysqli_stmt_fetch($stmt1)){ $id=htmlspecialchars($id); $title=htmlspecialchars($title); $detail = $purifier->purify($detail); $posts.="<div id='date_news'><div id='news_holder$id' class='news_holder'><h3 id='show_title'>".htmlspecialchars($title)."</h3>".$detail."</div>"; в while(mysqli_stmt_fetch($stmt1)){ $id=htmlspecialchars($id); $title=htmlspecialchars($title); $detail = $purifier->purify($detail); $posts.="<div id='date_news'><div id='news_holder$id' class='news_holder'><h3 id='show_title'>".htmlspecialchars($title)."</h3>".$detail."</div>"; 

HTML для $detail

В базе данных

 <p><strong>Alu Vazi</strong></p> <p>I love alu vazi with&lt;script&gt;alert("XSS")&lt;/script&gt;</p> 

Экран пользователя

Alu Vazi

Я люблю alu vazi с предупреждением <script> («XSS») </script>

ОК, следуя моему комментарию, попробуйте добавить это в свою конфигурацию HTML Purifier, его следует включить по умолчанию, но стоит сделать снимок.

 $config = HTMLPurifier_Config::createDefault(); $config->set('HTML.ForbiddenElements', array('script','style','applet')); $purifier = new HTMLPurifier($config); 

редактировать

 <p>I love alu vazi with&lt;script&gt;alert("XSS")&lt;/script&gt;</p> 

Вы уже избегаете <script> поэтому в HTML-очистителе нет ничего для анализа. Он будет выводиться на странице в результате, но вы эффективно нейтрализовали попытку XSS.

В вашем коде что-то уже ускользает от символов HTML перед сохранением в базе данных.