Я использую HTMLPurifier для простого Tinymce WYSIWYG
Если я не использую htmlspecialchars
будет ли это открыто для XSS Attack
Это то, что я делаю
$detail = $purifier->purify($detail);
очистить данные для этого textarea
.Если я использую htmlspecialchars
, он также удаляет все основные теги, что не очень удобно для пользователя. WYSIWYG
редактор. Но проблема в том, что это позволяет <script> tag
также.
И если я изменю conf setting
в
$config->set('ExtractStyleBlocks.1', true);
Не позволяет <
а также >
за <script> tag
.Перерабатывать <
а также >
за <script>
только. Но это показывает <p>This is paragraph</p>
,<strong>This text is bold</strong>
и так далее. Не должен показывать <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>";
HTML для $detail
В базе данных
<p><strong>Alu Vazi</strong></p>
<p>I love alu vazi with<script>alert("XSS")</script></p>
Экран пользователя
Алу Вази
Я люблю Алу Вази с<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 Purifier нечего анализировать. В результате он будет выведен на страницу, но вы эффективно нейтрализовали попытку XSS.
В вашем коде что-то уже экранирует символы HTML перед сохранением в базу данных.
Других решений пока нет …