2

Checkmarx 对我正在处理的代码库进行了分析,并返回了一份包含“Stored XSS”问题的报告。该问题指出:

方法 GetHomepageFilterByLocale HomepageRepo.cs 从数据库中获取 Select 元素的数据。然后,此元素的值在没有经过适当过滤或编码的情况下流经代码,并最终在 GetProductsByFilterType HomepageController.cs 方法中显示给用户。这可能会启用存储的跨站点脚本攻击。

是否有解决此问题的标准推荐方法?

请参阅下面提到的两种方法的代码片段。

主页Repo.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);
    }
4

1 回答 1

2

您应该查看漏洞流(查看漏洞时屏幕的右侧)并查看该漏洞涉及哪些对象。

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

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

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

我在想类似的事情:

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

于 2016-11-12T01:59:18.090 回答