如何解决 Checkmarx 报告的 Stored XSS 问题

Das*_*nch 6 c# xss checkmarx

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

\n\n

方法 GetHomepageFilterByLocale HomepageRepo.cs 从数据库中获取 Select 元素的数据。然后,此元素\xe2\x80\x99s 值会流经代码,而不会被正确过滤或编码,并最终在方法 GetProductsByFilterType HomepageController.cs 中显示给用户。这可能会引发存储型跨站点脚本攻击。

\n\n

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

\n\n

请参阅下面的代码片段了解上述两种方法。

\n\n

主页Repo.cs

\n\n
public HomepageFilter GetHomepageFilterByLocale(int localeId)\n    {\n        return _context.HomepageFilter.SingleOrDefault(x => x.LocaleId == localeId);\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

HomepageController.cs

\n\n

GetHomepageViewModel() 方法是调用存储库方法的地方。

\n\n
[HttpGet]\n    public ActionResult GetProductsByFilterType(int locale, string filterType)\n    {\n        HomepageViewModel model = GetHomepageViewModel(locale, filterType);\n\n        if (model?.Products != null)\n        {\n            model.Products.ForEach(p => p.Name = HttpUtility.HtmlEncode(p.Name));\n            model.Products.ForEach(p => p.ImageUrl = HttpUtility.HtmlAttributeEncode(p.ImageUrl));\n        }\n\n        return Json(model, JsonRequestBehavior.AllowGet);\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

bkl*_*bkl 3

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

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

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

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

我在想这样的事情:

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