我正在处理的代码库已由 Checkmarx 进行了分析,并返回了包含“Stored XSS”问题的报告。该问题指出:
\n\n方法 GetHomepageFilterByLocale HomepageRepo.cs 从数据库中获取 Select 元素的数据。然后,此元素\xe2\x80\x99s 值会流经代码,而不会被正确过滤或编码,并最终在方法 GetProductsByFilterType HomepageController.cs 中显示给用户。这可能会引发存储型跨站点脚本攻击。
\n\n是否有解决此问题的标准推荐方法?
\n\n请参阅下面的代码片段了解上述两种方法。
\n\n主页Repo.cs
\n\npublic HomepageFilter GetHomepageFilterByLocale(int localeId)\n {\n return _context.HomepageFilter.SingleOrDefault(x => x.LocaleId == localeId);\n }\nRun Code Online (Sandbox Code Playgroud)\n\nHomepageController.cs
\n\nGetHomepageViewModel() 方法是调用存储库方法的地方。
\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 }\nRun Code Online (Sandbox Code Playgroud)\n
您应该查看漏洞流(查看漏洞时位于屏幕右侧)并查看此漏洞涉及哪些对象。
您还可以单击漏洞名称右侧的小问号(“?”)。它应该告诉你如何解决它。
最后,如果您仍然遇到问题,您可以单击查询查看器并预览查询的确切内容。
现在:根据我自己的经验,使用 HttpUtility.HtmlEncode 方法可以轻松修复 xss 漏洞。
我在想这样的事情:
HttpUtility.HtmlEncode(_context.HomepageFilter.SingleOrDefault(x => x.LocaleId == localeId));