Каков наилучший способ хранения ввода-вывода WMD на SQL-сервере и отображения позже?

Я рассматриваю использование ОМУ в своем проекте вместо существующего RadEditor. Я читал несколько сообщений о том, как хранить и извлекать данные, и я хочу убедиться, что у меня есть правильная концепция, прежде чем продолжить.

Если мои исследования верны, вот что я должен делать.

  • Я должен хранить данные редактора дважды (один раз как HTML и один раз как Markdown)
  • Прежде чем хранить его, я должен запустить HTML через Whitelist.
  • Я должен запустить HTML через AntiXSS на выходе (перед отображением)
  • Я должен использовать данные Markdown ТОЛЬКО для повторного заполнения Markdown для редактирования.

Может ли кто-нибудь подтвердить или опровергнуть, правильно ли это, а также добавить любой полезный ввод по теме?

Литература
Переформатировать мой код: Sanitize Html
qaru.site/info/506248/...
qaru.site/info/513830/...
qaru.site/info/204692/...

Ответ 1

Я использую Markdown в блоге, который я пишу (кто не пишет движки блога?), и я также реализовал Markdown в ряде настраиваемых CMS, которые я написал для клиентов.

Я делаю это очень похоже на то, как команда Qaru делает это:

  • Я использую wmd.js в качестве редактора клиентской стороны.
  • Я использую обработку сервера MarkdownSharp.
  • Я использую Jeff Atwood Sanitize HTML для обработки обработки HTML.

Вот некоторые ресурсы, которые говорят о Markdown:

Нижняя строка:

  • Я сохраняю сообщение в форме, в которой он был отправлен; Он отображается с помощью MarkdownSharp.
  • Я дезинфицирую HTML, используя подход Джеффа Этвуда (на выходе, а не на входе).
  • Я использую ASP.NET MVC "лучшие практики" (очень субъективный термин) для работы с XSS и XSRF.

Ответ 2

Итак, одна из сторон за Markdown заключается в том, что она создаст "безопасный" html - не должно быть необходимости в отдельной кодировке.

В более общем плане я бы рекомендовал хранить "необработанные" данные в базе данных, не преобразовывая его или не дезинфицируя его. Вы должны всегда санировать или трансформироваться как можно ближе к точке рендеринга - это дает большую гибкость (о, внезапно мне нужно отображать как RSS. Или JSON. Черт, я не могу, потому что я предварительно отформатирован для HTML), и, если обновите санитор или рендерер, вы увидите эффекты обновления для каждой части данных.

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