Мне не удалось определить «наилучшую практику», но, как правило, у вас есть три варианта принятия ввода уценки:
Разрешить HTML в содержимом Markdown (именно так работает Markdown изначально / официально, но если рассматривать его наивно, это может привести к атакам XSS).
Просто относитесь к любому HTML как к простому тексту, позволяя процессору Markdown избегать ввода пользователя. Таким образом, <small>…</small>
при вводе будет создавать не маленький текст, а буквальный текст «<small>…</small>
».
Выбросьте все теги HTML в Markdown. Это довольно враждебно для пользователя и может подавиться текстом, например <3
, в зависимости от реализации. Такой подход используется при переполнении стека.
Мой вопрос касается, в частности, случая №1.
Учитывая, что , что хорошо для меня работало отправляет пользовательский ввод через
- Уценка для Python , которая дополнительно поддерживает дополнительный синтаксис и затем через
- html5lib 's sanitizer .
Я бросил кучу попыток атаки XSS на эту комбинацию, и все провалились (ура!); но использование доброкачественных тегов, таких как <strong>
, работало безупречно.
Таким образом, вы фактически используете опцию № 1 (по желанию), за исключением потенциально опасных или искаженных фрагментов HTML, которые рассматриваются как в опции № 2.
(Спасибо Y.H Wong за указание мне в направлении этой библиотеки Markdown!)