Intereting Posts

Выйти из уязвимости XSS, поддерживая синтаксис Markdown?

Я планирую использовать синтаксис 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 .