как удалить все теги XSS (script, iframe, canvas ...), кроме других тегов html?
Все теги могут скрывать риски XSS. Например <b onmouseover="...">
, <a href="javascript:...">
или <strong style="padding: expression(...)">
.
Чтобы сделать HTML «безопасным», необходимо отфильтровать его, чтобы разрешить только минимальный набор известных безопасных элементов и атрибутов . Все атрибуты URL нуждаются в дальнейшей проверке известных протоколов. Это известно как «белый список».
Это непростая задача, поскольку вам, как правило, придется правильно анализировать HTML, чтобы определить, какие элементы и атрибуты присутствуют. Простого регулярного выражения будет недостаточно для выбора диапазона потенциально проблемного контента, особенно в JavaScript, который имеет относительно ограниченный механизм регулярных выражений (без просмотра назад, ненадежного просмотра и т. Д.).
Существуют инструменты для серверных языков, которые сделают это за вас, например, PHP Purifier HTML. Я бы порекомендовал использовать один из них на стороне сервера перед возвратом контента, так как в настоящее время я не знаю хорошей библиотеки такого рода для JavaScript.