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

本文关键字:报告 存储 XSS 问题 Checkmarx 何解决 解决 | 更新日期: 2023-09-27 18:17:24

我正在处理的代码库已经被Checkmarx分析过了,它返回了一个包含"存储XSS"问题的报告。问题说明:

方法GetHomepageFilterByLocale HomepageRepo.cs为Select元素从数据库获取数据。然后,该元素的值在代码中流动,没有经过适当的过滤或编码,并最终在方法GetProductsByFilterType homepageconcontroller .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);
    }

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

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

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

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

现在:根据我自己的经验,使用HttpUtility可以很容易地修复xss漏洞。HtmlEncode方法。

我想这样写:

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