Избежать уязвимости XSS, сохраняя синтаксис Markdown? - PullRequest
3 голосов
/ 08 марта 2012

Я планирую использовать Синтаксис Markdown на моей веб-странице.Я буду хранить пользовательский ввод (необработанный, без экранирования и т. Д.) В базе данных, а затем, как обычно, распечатывать и экранировать на лету с помощью htmlspecialchars () .

как это может выглядеть:

echo markdown(htmlspecialchars($content));

Благодаря этому я защищен от уязвимостей XSS, и Markdown работает.Или, по крайней мере, что-то вроде работы.

Проблема, скажем, в синтаксисе > (я думаю, есть и другие случаи).

Короче говоря, чтобы процитировать, вы что-то делаетекак это:

> This is my quote.

После экранирования и анализа в Markdown я получаю это:

> This is my quote.

Естественно, анализатор Markdown делает не распознает > как «символ цитаты», и он не работает!: (

Я пришел сюда, чтобы попросить решения этой проблемы. Одна идея заключалась в следующем:

Сначала проанализируйте Markdown, а затем Очиститель HTML удалите «плохо».части ».

Что вы думаете об этом? Будет ли это на самом деле работать?

Я уверен, что у кого-то была такая же ситуация, и тот тоже может мне помочь.:)

Ответы [ 2 ]

4 голосов
/ 08 марта 2012

Да, на определенном сайте такая же ситуация. На момент написания этой статьи у вас на сайте 1664 репутации:)

В Stack Overflow мы делаем именно то, что вы описываете (за исключением того, что мы не визуализируем на лету). Введенный пользователем исходный код Markdown преобразуется в обычный HTML, а затем результат очищается с использованием подхода белого списка ( версия JavaScript , версия C # часть 1 , часть 2 ).

Это тот же подход, который используется в HTML Purifier (я никогда не использовал его, хотя я не могу говорить о деталях).

1 голос
/ 07 мая 2012

Подход, который вы используете, небезопасен.Рассмотрим, например, этот пример: "[clickme](javascript:alert%28%22xss%22%29)".В общем, не избегайте ввода в процессор Markdown.Вместо этого используйте Markdown правильно в безопасном режиме или примените HTML-очиститель или другое HTML-дезинфицирующее средство к выходу процессора Markdown.

Я написал в другом месте о том, как безопасно использовать Markdown.См. Ссылку для получения подробной информации о том, как использовать его безопасно, но краткая версия: важно использовать последнюю версию, установить safe_mode и установить enable_attributes=False.

...