Кодовая база, над которой я работаю, была проанализирована Checkmarx, и она вернулась с отчетом, содержащим проблему «Сохраненный XSS». В проблеме говорится:
Метод GetHomepageFilterByLocale HomepageRepo.cs получает данные из базы данных для элемента Select. Затем значение этого элемента проходит через код без должной фильтрации или кодирования и в конечном итоге отображается пользователю в методе GetProductsByFilterType HomepageController.cs. Это может активировать атаку Stored Cross-Site-Scripting.
Есть ли стандартный рекомендуемый способ решения этой проблемы?
См. ниже фрагменты кода для обоих упомянутых методов.
HomepageRepo.cs
public HomepageFilter GetHomepageFilterByLocale(int localeId)
{
return _context.HomepageFilter.SingleOrDefault(x => x.LocaleId == localeId);
}
Контроллер домашней страницы.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);
}