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