Я использую 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 перед сохранением в базе данных.