Как обезопасить сайт от комментария пользователя с XSS, но при этом сохранить нужные теги (htmlspecialchars делает теги обычным текстом)?
Здравствуйте. У меня на сайте пользователи могут вводить комментарии. В этих комментариях может быть ссылка (тег а с его атрибутами), различное форматирование. Как мне обезопасить сайт от комментария пользователя с XSS, но при этом сохранить нужные теги (htmlspecialchars делает теги обычным текстом)?
Вообще говоря, strip_tags позволяет оставить некоторые теги. Собственно оставляем набор типа "p", "a", "strong", "em", "br", а для пущей чистоты грузим сухой остаток как DOMDocument, пробегаемся по нодам и чистим атрибуты.
Ну или просто пробегаемся грузим как DOMDocument, пробегаемся по нодам и чистим лишние атрибуты, а лишние ноды удаляем. Работать должно побыстрее preg-replace.
В базе можете хранить со всем html-барахлом, а на выхлопе конечному пользователю прогнать через какой-нибудь preg-replace выкусив всю дрянь, которой быть не должно. Это если надо полностью сохранять форматирования коммента и отдавать такое же форматирование. Если нет — можно регулярками повыкусывать из текста всякое.