Задать вопрос
sorry_i_noob
@sorry_i_noob

Как обезопасить сайт от комментария пользователя с XSS, но при этом сохранить нужные теги (htmlspecialchars делает теги обычным текстом)?

Здравствуйте. У меня на сайте пользователи могут вводить комментарии. В этих комментариях может быть ссылка (тег а с его атрибутами), различное форматирование. Как мне обезопасить сайт от комментария пользователя с XSS, но при этом сохранить нужные теги (htmlspecialchars делает теги обычным текстом)?
  • Вопрос задан
  • 197 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 4
FoxIK
@FoxIK
HTML Purifier поможет вам
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Allowed', 'p[style],span[style],em,b,strong,img[src],img[width],img[height]');
$sanitiser = new HTMLPurifier($config);
$text = $sanitiser->purify(filter_input(INPUT_POST, 'text'));
Ответ написан
@hell
Вообще говоря, strip_tags позволяет оставить некоторые теги. Собственно оставляем набор типа "p", "a", "strong", "em", "br", а для пущей чистоты грузим сухой остаток как DOMDocument, пробегаемся по нодам и чистим атрибуты.
Ну или просто пробегаемся грузим как DOMDocument, пробегаемся по нодам и чистим лишние атрибуты, а лишние ноды удаляем. Работать должно побыстрее preg-replace.
Ответ написан
Комментировать
RomaZveR
@RomaZveR
CEO AlertMoney, PHP/Golang Developer
В таком случае лучше смотреть в сторону bb-кодов.
Ответ написан
Комментировать
Lopar
@Lopar
системный администратор
В базе можете хранить со всем html-барахлом, а на выхлопе конечному пользователю прогнать через какой-нибудь preg-replace выкусив всю дрянь, которой быть не должно. Это если надо полностью сохранять форматирования коммента и отдавать такое же форматирование. Если нет — можно регулярками повыкусывать из текста всякое.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы