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);
}