Я планирую использовать синтаксис Markdown на моей веб-странице. Я буду держать пользователей в исходном состоянии (raw, no escaping или что-то еще) в базе данных, а затем, как обычно, распечатывать и выходить на лету с помощью htmlspecialchars () .
Вот как это могло выглядеть:
echo markdown(htmlspecialchars($content));
Делая это, я защищен от уязвимостей XSS и работает Markdown. Или, по крайней мере, любопытная работа.
Проблема заключается, скажем, в синтаксисе (есть и другие случаи, я думаю).
Короче говоря, цитирую, вы делаете что-то вроде этого:
> This is my quote.
После побега и разбора на Markdown я получаю следующее:
> This is my quote.
Естественно, маркерный анализ не распознает >
как «символ цитаты», и это не сработает! 🙁
Я пришел сюда, чтобы попросить решения этой проблемы. Одна из идей заключалась в следующем:
Сначала проанализируйте Markdown, – затем с помощью HTML Purifier удалите «плохие части».
Что вы думаете об этом? Будет ли это на самом деле работать?
Я уверен, что у кого-то была такая же ситуация, и я тоже могу помочь. 🙂
Да, на определенном веб-сайте есть такая же ситуация. В то время, когда я пишу это, у вас репутация 1664 на этом сайте 🙂
В Stack Overflow мы делаем то, что вы описываете (за исключением того, что мы не выполняем «на лету»). Введенный пользователем источник Markdown преобразуется в обычный HTML, и результат затем дезинфицируется с использованием белого списка ( версия JavaScript , часть 1 версии C #, часть 2 ).
Это тот же подход, который использует HTML-очиститель (никогда не использовал его, я не могу говорить для деталей, хотя).
Подход, который вы используете, небезопасен. Рассмотрим, например, этот пример: « [clickme](javascript:alert%28%22xss%22%29)
». В общем, не избегайте ввода процессора Markdown. Вместо этого используйте Markdown правильно в безопасном режиме или примените очиститель HTML или другой дезинфицирующее средство для HTML к выходу процессора Markdown.
Я уже писал о том, как безопасно использовать Markdown. Подробную информацию о том, как его безопасно использовать, см. В ссылке, но короткая версия: важно использовать последнюю версию, установить safe_mode
и установить enable_attributes=False
.