Насколько безопасно принимать заранее определенный набор безопасных HTML-тегов из запроса?

Одна из первых вещей, которую я усвоил как веб-разработчик, - это никогда не принимать HTML от клиента. (Возможно, только если я его закодирую в HTML.)
Я использую редактор WYSIWYG (TinyMCE), который выводит HTML. До сих пор я использовал его только на странице администратора, но теперь я хотел бы также использовать его на форуме. В нем есть модуль BBCode, но он кажется неполным. (Возможно, сам BBCode не поддерживает все, что я хочу.)

Итак, вот моя идея:

Я разрешаю клиенту напрямую POST некоторого HTML-кода. Затем я проверяю код на работоспособность ( правильность ) и удаляю все теги, атрибуты и правила CSS, которые не разрешены на основе заранее определенного набора разрешенных тегов и стилей.
text-decoration

Они охватывают все, что мне нужно для форматирования, и (насколько мне известно) не представляют угрозы безопасности. По сути, соблюдение правильной формы и отсутствие каких-либо стилей макета не позволяют кому-либо повредить макет сайта. Запрещение тега сценария и т.п. предотвращает XSS.
(Одно исключение: возможно, мне следует разрешить width / height в заранее определенном диапазоне для изображений.)

Другое преимущество: этот материал избавит меня от необходимости писать / ищите конвертер BBCode-Html.

Что вы думаете?
Безопасно ли это делать?

(Как я вижу, StackOverflow также позволяет использовать некоторый базовый HTML в поле «Обо мне», поэтому я не думаю, что я первый, кто это реализовал.)

РЕДАКТИРОВАТЬ:

Я нашел этот ответ , в котором объясняется, как это довольно легко сделать.
И, конечно же, никому не следует думать об использовании регулярных выражений для этого .

Сам вопрос не связан ни с каким языком или технологией, но если вам интересно, я пишу это приложение на ASP.NET.

6
задан Community 23 May 2017 в 12:18
поделиться