如何解决Checkmarx报告的存储XSS问题

时间:2016-11-11 16:39:25

标签: c# xss checkmarx

我正在研究的代码库已由Checkmarx进行分析,并返回包含“存储的XSS”问题的报告。该问题指出:

方法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 个答案:

答案 0 :(得分:1)

您应该查看漏洞流(在查看漏洞时位于屏幕右侧),并查看此漏洞中涉及的对象。

您还可以点击漏洞名称右侧的小问号('?')。它应该告诉你如何解决它。

最后,如果您仍然遇到问题,可以单击查询查看器并预览查询所查找的内容。

现在:根据我自己的经验,使用HttpUtility.HtmlEncode方法可以轻松修复xss漏洞。

我在想:

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