Безопасные частичные обновления страницы в asp.net mvc? - PullRequest
0 голосов
/ 19 января 2019

У нас есть гибридное приложение webforms / asp.net, которое выполняет много частичных обновлений страниц из javascript с использованием jquery.

Типичный (небезопасный) шаблон в javascript нашего приложения состоит в том, чтобы ответить на запрос пользователя переписать часть страницы примерно так:

$.ajax({
        type: "GET",
        url: urlVariableHere,
        success: function (data) {
            $("#elementIdHere").html(data); 
        },
        error: function (XMLHttpRequest, ajaxOptions, ex) {
            errorHandlerFunction(XMLHttpRequest);  
        }    

«urlVariableHere» указывает на метод контроллера MVC, который возвращает визуализированное представление MVC. Другими словами, метод Controller возвращает блоб необработанного HTML.

Этот шаблон небезопасен из-за вызова метода JQuery html (), который уязвим для атаки межсайтовых скриптов. Теперь нам нужно, чтобы это приложение прошло статический анализ Veracode, и этот небезопасный шаблон повторяется несколько сотен раз.

Хуман указал в своем ответе, что если мы вызываем метод Controller, который отображает представление, которое не использует метод Html.Raw, мы защищены от атаки XSS. Проблема в том, что нам нужно пройти статическое сканирование Veracode, и по внутренним причинам мы не можем пометить эти недостатки как «смягченные». По внутренним причинам приложение должно пройти статическое сканирование с нулевыми мерами.

Каков наилучший (то есть наиболее экономичный по времени) способ сделать это приложение безопасным и при этом сохранить возможность частичного обновления страницы из javascript? Прямо сейчас я вижу только три варианта, все они огромные усилия:

  1. Изменить каждую частичную обратную передачу на полную страницу обратной передачи.
  2. Измените каждый вызов ajax для получения JSON вместо HTML, а затем безопасно создайте элементы DOM из JSON, используя безопасные методы, такие как document.createElement (), element.setAttribute (), element.appendChild () и т. Д.
  3. Переписать приложение, чтобы использовать JavaScript-фреймворк (Angular, Vue) или библиотеку (React).

Мне не хватает более простого решения?

1 Ответ

0 голосов
/ 19 января 2019

Насколько я знаю, XSS - это проблема, когда вы получаете какой-то вклад от пользователя, мне не ясно, почему вы не должны доверять ответу от вашего собственного контроллера?То, что вы делаете, очень типично, и я видел бесчисленное количество обучающих уроков (например, c-sharpcorner , aspsnippets или dotnethowts и т. Д.).

Кроме того, ASP.NET MVC View Engine по умолчанию кодирует HTML .Я не уверен, как вы отредактируете свой частичный вид, но если вы не используете @Html.Raw, вы потенциально дважды закодируете результат.

Но если вы хотите закодировать результат HTML, выможет избежать вашей строки HTML, см. этот ответ

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