Как решить проблему с сохраненным XSS, о которой сообщает Checkmarx

Кодовая база, над которой я работаю, была проанализирована 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);
    }

person Dasha Finch    schedule 11.11.2016    source источник


Ответы (1)


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

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

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

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

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

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

person bkl    schedule 12.11.2016