Обработка блоков кода с уценкой (Pagedown) - PullRequest
2 голосов
/ 31 января 2012

Могу поспорить, что здесь что-то неправильно использую ...

Мое приложение MVC3 использует Pagedown для предоставления текстового редактора JavaScript, конвертора уценки и предварительного просмотра в реальном времени. Я использую его объект «santizer» для удаления потенциально опасного кода, как предложено в инструкции - вы можете увидеть его в работе в demo .

Код JavaScript выглядит так:

(function () {
    var converter1 = Markdown.getSanitizingConverter();
    var editor1 = new Markdown.Editor(converter1);
    editor1.run();
})();

Этот код преобразует помеченный тег textarea в редактор и использует очищающий конвертер для удаления плохих вещей. В некотором смысле это работает. Примеры:

  • marquee тег, так как в демоверсии он удаляется правильно.
  • <p style="font-size:40em;">Super Big Text</p> разделен до Super Big Text

Но что-то не так ... когда я вставляю поддельный javascript, например, так:

TEXT `<script type="text/javascript">alert("gotcha!");</script>` MORE TEXT

и опубликовать форму, она разлетается с желтым экраном смерти:

Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted.

Эта строка еще не закодирована безопасно, как &lgt;script ... и т. Д.?

Вопрос: Чего мне не хватает, чтобы обеспечить правильное преобразование блоков кода и встроенного кода, чтобы они могли быть отправлены на сервер в виде безопасной строки?

1 Ответ

6 голосов
/ 31 января 2012

Чего мне не хватает, чтобы обеспечить правильное преобразование блоков кода и встроенного кода, чтобы они могли быть отправлены на сервер в виде безопасной строки?

Ничего.Или, по крайней мере, вероятно, ничего, если вы создаете текстовое поле с правильным выходным экранированием, которое вы будете использовать, например, при использовании, например, веб-форм или элемента управления MVC.

YSOD появляется для любого входного содержимого, которое выглядиткак разметка элемента, независимо от того, обрабатывает ли ваше приложение корректный выход или уязвимо.Это не указывает на проблему XSS, это происходит постоянно.

Если вы хотите разрешить ввод данных пользователем, который содержит данные, похожие на разметку элементов (и в этом нет ничего по сути опасного - вам просто нужно получитьвыход уходит вправо), отключите проверку запроса.Это полностью поддельный как реальная функция безопасности и только дает вам ложное чувство безопасности;разочаровывает то, что Microsoft настаивает на этом, поскольку выдает фатальное недоразумение о том, что такое HTML-инъекция.

К сожалению, отключение этого становится более раздражающим в ASP.NET 4. Вы должны сбросить старую модель с <httpRuntime requestValidationMode="2.0" />а затем добавьте ValidateRequest="false" на страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...