Санитарный ввод, но выход не так, как ожидалось

Это одна из моих форм (PHP + MySQL, textarea заменена TinyMCE). Он записывает описание с параграфами, марками, заголовками и выравниванием текста (справа, слева, в центре и выравниванием).

введите описание изображения здесь

После отправки запись выглядит как

<p style="text-align: justify;"><strong>Introduction</strong></p> <p style="text-align: justify;">The death of the pixel leaves you with a flowing, magazine-quality canvas to design for. A canvas where curves are curves, not ugly pixel approximations of curves. A canvas that begins to blur the line between what we consider to be real and what we consider to be virtual.</p> <p style="text-align: justify;">It wasn't too long ago that there was one set of rules for use of type on print and use of type on screen. Now that we have screens that are essentially print quality, we have to reevaluate these conventions.</p> <p style="text-align: justify;">Web sites are transforming from boring fields of Arial to embrace the gamut of typographical possibilities offered by web fonts. Web fonts, combined with the style and layout options presented by the creative use of CSS and JavaScript offer a new world of typographic oppor</p> <ol> <li style="text-align: justify;">point 1</li> <li style="text-align: justify;">point 2</li> <li style="text-align: justify;">point 3</li> </ol> 

Я прочитал, что вам нужно санировать данные, которые попадают в базу данных, чтобы избежать XSS и начали искать решение.

Решение, которое я нашел, это использовать «htmlspecialchars ()» (Источник: Lynda.com – Создание защищенных веб-сайтов PHP).

Итак, в учебном пособии сказано, что нам нужно дезинфицировать наши данные перед сохранением в базе данных и использовать что-то вроде (пример кода)

 <?php if($_SERVER['REQUEST_METHOD'] === 'POST') { $category_description = $_POST['category_description']; echo $category_description; echo '<br><br>'; echo htmlspecialchars($category_description); echo '<br><br>'; echo htmlentities($category_description); echo '<br><br>'; echo strip_tags($category_description); } ?> 

чтобы избежать XSS .

Я добираюсь до этого. Функция htmlspecialchars () преобразует некоторые предопределенные символы в объекты HTML, htmlentities () преобразует символы в объекты HTML и strip_tags () полностью удаляет любые теги.

Но после использования htmlspecialchars (), htmlentities () и strip_tags (), результат теперь отображается как

введите описание изображения здесь

который, как я считаю, безопасен, но не выглядит хорошо на первой странице, когда он извлекается из базы данных.

Как сделать ввод, который был передан через htmlspecialchars или htmlentities?

Solutions Collecting From Web of "Санитарный ввод, но выход не так, как ожидалось"

Мое предложение – создать функцию для дезинфекции всех ваших текстовых входов и функции для проверки всех ваших выходов, поступающих из базы данных или любых других источников, например:

 <?php // filter for user input function filterInput($content) { $content = trim($content); $content = stripslashes($content); return $content; } //filter for viewing data function filterOutput($content) { $content = htmlentities($content, ENT_NOQUOTES); $content = nl2br($content, false); return $content; } 

в зависимости от вашей стратегии вы могли бы добавить дополнительные функции в фильтр или удалить некоторые. Но у вас есть функция здесь, чтобы защитить вас от XSS.

EDIT: в дополнение к вышеуказанной функции этот ответ также может быть релевантным в части защиты вашего сайта.

Ссылка на различные методы:

Также неплохо смотреть на следующие ссылки:

  • Каков наилучший метод для дезинфекции пользовательского ввода с помощью PHP?
  • Конечная чистая / безопасная функция

И, что важно, хорошо знать риски 10-го класса и узнать об этом больше.

Я не уверен, что это правильный подход к проблеме или нет, но я нашел функцию «htmlspecialchars_decode ()» в руководстве php. В руководстве говорится, что он делает точно противоположное «htmlspecialchars ()». Я пробовал, и он работает хорошо.

Функция html_entity_decode () противоположна htmlentities ().

Я использовал HTMLPurifier, который является библиотекой фильтров PHP для дезинфекции ввода HTML.

Санизировать контент POST с содержимым HTML