Отраженный XSS в объекте Kendo DataSourceRequest

У нас есть приведенное ниже действие в контроллере для заполнения данных сетки кендо.

public ActionResult GetCompanyDetails([DataSourceRequest] DataSourceRequest request)
{
   var companyDetails = BusinessLayer.GetCompaniesDetail();
   return Json(companyDetails.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}

При выполнении сканирования checkmarx указанный выше метод был идентифицирован как уязвимость Reflected XSS.

Метод GetCompanyDetails в строке 1 wxy/xyz/Controllers/ABCController.cs получает пользовательский ввод для элемента запроса. Затем значение этого элемента проходит через код без надлежащей очистки или проверки и в конечном итоге отображается пользователю в методе GetCompanyDetails в строке 4 файла wxy/xyz/Controllers/ABCController.cs. Это может привести к атаке с использованием межсайтовых сценариев.

Как очистить объект DataSourceRequest request, чтобы исправить эту проблему XSS?


person Abdul Hameed    schedule 26.02.2020    source источник
comment
Вам нужно очистить возвращаемое значение: companyDetails.ToDataSourceResult(request) . Если вы сделаете это, у вас больше не будет никаких проблем.   -  person SPoint    schedule 26.02.2020
comment
@SPoint, как очистить объект DataSourceRequest, возвращенный companyDetails.ToDataSourceResult(request). он имеет много строковых свойств. очищаем ли мы все его строковые свойства?   -  person Abdul Hameed    schedule 26.02.2020


Ответы (2)


Рекомендую прочитать: Проверка OWASP CheatSheet.

Да, вам нужно проверить все данные, которые у вас есть, отформатировать, ввести. Возможно, вам нужно проанализировать каждый элемент строки и преобразовать каждый в одну строку перед применением очистки. Другим решением может быть просто кодирование результата companyDetails.ToDataSourceResult(request). В этом бою только XSS.

Но лучшее решение - это

  1. Подтвердить
  2. Кодировать

Эта битва снова инъекция и XSS

person SPoint    schedule 26.02.2020
comment
Основная проблема с проверкой объекта theDataSourceRequest заключается в том, что он не закодирован нами. он входит в состав пространства имен Kendo.Mvc.UI, и мы не знаем, какую проверку или очистку выполнять. для пользовательских классов, созданных нами, мы проверяем все строковые свойства и при необходимости кодируем их. но для этого класса у него есть множество свойств, которые являются объектами других классов. и мы не знаем с чего начать - person Abdul Hameed; 26.02.2020

Компонент Kendo.Mvc.UI Grid делает все возможное, чтобы предотвратить проблемы XSS, кодируя содержимое во время рендеринга. По умолчанию Grid кодирует содержимое, отображаемое в ячейках, что означает, что если пользователь отправил скрипт, скрипт не будет выполняться, но будет отображаться как стандартный текст. Имейте в виду, что эту кодировку можно отключить. установив столбец. Закодированная конфигурация в false

columns.Bound(bank => bank.Website).Filterable(false).Encoded(false);

Предлагаемая рефлективная уязвимость XSS полностью и полностью не может быть использована современными браузерами из-за следующего типа контента:

return Json(model.ToDataSourceResult(request), "application/json", System.Text.Encoding.UTF8, JsonRequestBehavior.AllowGet);
person Maksud    schedule 12.04.2020