Лучшая практика: Пользователь генерировал очистку HTML

Я кодирую ширину WYSIWYG-редактора designMode = "на" на iframe. Редактор хорошо работает, и я храню код, как находится в базе данных.

Перед выводом HTML я должен "убрать" с php на серверной стороне для предотвращения перекрестных сценариев сайта и других страшных вещей. Есть ли своего рода лучшая практика о том, как сделать это? Какие теги могут быть опасными?

ОБНОВЛЕНИЕ: Опечатка зафиксировала, это "Что видишь, то и получишь". Ничто нового :)

6
задан Martin 5 May 2010 в 14:33
поделиться

4 ответа

Лучшая практика - разрешать только определенные вещи, которые, как вы знаете, не опасны, а все остальное удалять/удалять. См. статью Автоматизированное обнаружение и удаление вредоносного кода в Интернете (OWASP AntiSamy), где это обсуждается (библиотека написана на Java, но принципы применимы к любому языку).

5
ответ дан 10 December 2019 в 02:43
поделиться

Если вы действительно хотите разрешить это, вам следует использовать метод белого списка.

Вероятно, лучший подход - запретить HTML и использовать вместо него упрощенный формат разметки; вы можете предварительно выполнить рендеринг в HTML и сохранить его в базе данных, если производительность вызывает беспокойство. Избежание подобных проблем - одна из главных причин использования Markdown , Textile , reStructuredText и т. Д.

ПРИМЕЧАНИЕ : я связался с Markdown со вкусом GitHub (GFM), а не Standard Markdown (SM). GFM решает некоторые общие проблемы, с которыми конечные пользователи сталкиваются с SM.

3
ответ дан 10 December 2019 в 02:43
поделиться

Если вы знакомы с ASP .NET, просто выполните Server.htmlencode (), чтобы преобразовать специальные символы, такие как <> в "& g t;" "& l t;"

В php вы можете использовать функции htmlspecialchars ().

После того, как специальные символы закодированы, межсайтовый скриптинг можно предотвратить.

0
ответ дан 10 December 2019 в 02:43
поделиться

Недавно я рассматривал тот же вопрос с Perl в качестве серверного языка.

При этом я столкнулся с HTML Purifier, который может быть тем, что вы хотите. Но очевидно, поскольку он на PHP, а не на Perl, я на самом деле не тестирует его.

Кроме того, в своем исследовании я пришел к выводу, что это очень сложный бизнес и рассматриваю, если это возможно, использование упрощенного языка разметки, такого как Markdown, как предложил Хэнк Гей.

1
ответ дан 10 December 2019 в 02:43
поделиться
Другие вопросы по тегам:

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