2016-11-11 9 views
0

Codebase, над которым я работаю, был проанализирован Checkmarx, и он вернулся с сообщением, содержащим проблему «Сохраненный XSS». В выпуске указывается:Как решить сохраненную проблему XSS, указанную Checkmarkx

Метод GetHomepageFilterByLocale HomepageRepo.cs получает данные из базы данных для элемента Select. Затем значение этого элемента протекает через код без надлежащей фильтрации или кодирования и в конечном итоге отображается пользователю в методе GetProductsByFilterType HomepageController.cs. Это может привести к атаке с сохраненным межсайтовым сценарием.

Есть ли стандартный рекомендуемый способ решения этой проблемы?

См. Ниже фрагменты кода для обоих указанных методов.

HomepageRepo.cs

public HomepageFilter GetHomepageFilterByLocale(int localeId) 
    { 
     return _context.HomepageFilter.SingleOrDefault(x => x.LocaleId == localeId); 
    } 

HomepageController.cs

метод GetHomepageViewModel(), где называется методом хранилища.

[HttpGet] 
    public ActionResult GetProductsByFilterType(int locale, string filterType) 
    { 
     HomepageViewModel model = GetHomepageViewModel(locale, filterType); 

     if (model?.Products != null) 
     { 
      model.Products.ForEach(p => p.Name = HttpUtility.HtmlEncode(p.Name)); 
      model.Products.ForEach(p => p.ImageUrl = HttpUtility.HtmlAttributeEncode(p.ImageUrl)); 
     } 

     return Json(model, JsonRequestBehavior.AllowGet); 
    } 

ответ

1

Вы должны смотреть на поток уязвимости (в правой части экрана при просмотре уязвимость) и какие объекты участвуют в этой уязвимости.

Вы также можете щелкнуть по значку знака вопроса ('?') Справа от имени уязвимости. он должен сказать вам, как его решить.

Наконец, если вы все еще сталкиваетесь с проблемами, вы можете щелкнуть на окне просмотра запросов и просмотреть, что именно ищет запрос.

Теперь: из моего собственного опыта, уязвимости xss легко фиксируются с помощью метода HttpUtility.HtmlEncode.

Я думаю, что-то вроде:

HttpUtility.HtmlEncode (_context.HomepageFilter.SingleOrDefault (х => x.LocaleId == LocaleID));