Как избавиться от ломающих тегов HTML которые создаются пользователем на странице?
Я создаю сайт какойто и пользователь может создать текст и публиковать ее . Проблема в том что если пользователь вводит в текст теги html и как то их стилизует style="style: value" то после публикации текст ломает страничку и этого не должно быть .
Вопрос:
Какие есть способы убрать эту лазейку ?
Дополнительно:
Если пользователь в принципе может вводить только текст, то собственоо и выводить его надо просто как текст, а не html. И всё, никаких санитайзеров не требуется.
Использовать санитайзеры, например, библиотеки:
https://github.com/cure53/DOMPurify
https://github.com/apostrophecms/sanitize-html
Какие есть способы убрать эту лазейку ?
Предположим, что пользователь вводит текст и жмет кнопку Сохранить > Получаем текст (на сервере или где?) > Чистим его (библиотеки выше) > Публикуем.
- Чистить на клиенте так себе решение, на бэке все равно нужно проверять что пришло от пользователя.
- ThunderCat,
Чистить на клиенте так себе решение
В вопросе не указаны как теги, так и конкретные серверные ЯП, а в остальном согласен - к фронту должна быть минимальная (если не нулевая) степень доверия.
Кстати, библиотеки выше вполне можно заюзать на ноде (JS то в теге присутствует ;)).
Ответы:
Так в чем проблема? В тегах как таковых или в их стилизации?
В первом случае - php strip_tags или аналогичный функционал другого ЯП на стороне сервера, во втором случае - редактор с поддержкой bbcode + strip_tags на стороне сервера.
С помощью JS можно просто запретить теги, при этом оставить только те, что вам надо, например img.
var bodyText = text.replace(/<!--[sS]*--!?>/g, "").replace(/<(?!img)/?[a-z][^>]*(>|$)/gi, ""); |
var bodyText = text.replace(/<!--[sS]*--!?>/g, "").replace(/<(?!img)/?[a-z][^>]*(>|$)/gi, "");
А вообще, по идее в каждом языке программирования есть библиотеки - парсеры. Например в JAVA есть замечательный плагин (API) JSOUP. Он позволяет находить теги и работать с DOM по аналогии JavaScript.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для избавления от ломающих тегов HTML, которые создаются пользователем на странице, можно использовать функцию htmlspecialchars() в PHP. Эта функция преобразует специальные символы в HTML сущности, что позволяет предотвратить внедрение вредоносного кода на страницу.
Пример использования функции htmlspecialchars() в PHP:
$user_input = "alert('XSS attack!');"; $safe_input = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); echo $safe_input;
В данном примере переменная $user_input содержит потенциально вредоносный скрипт. Функция htmlspecialchars() преобразует символы '' в соответствующие HTML сущности, чтобы скрипт не выполнился при выводе на страницу.
Таким образом, использование функции htmlspecialchars() позволяет защитить ваше приложение от атак XSS (межсайтового скриптинга), предотвращая внедрение вредоносного кода на страницу через пользовательский ввод.
Кроме того, рекомендуется также проводить валидацию пользовательского ввода на стороне сервера, чтобы удостовериться, что данные соответствуют ожидаемому формату и содержат только допустимые значения.