Я использую 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<script>alert("XSS")</script></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<script>alert("XSS")</script></p>
Вы уже избегаете <script> поэтому в HTML-очистителе нет ничего для анализа. Он будет выводиться на странице в результате, но вы эффективно нейтрализовали попытку XSS.
В вашем коде что-то уже ускользает от символов HTML перед сохранением в базе данных.