Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET-某些代码的安全性反映了XSS问题_C#_Asp.net Mvc_Security_Checkmarx_Secure Coding - Fatal编程技术网

C# ASP.NET-某些代码的安全性反映了XSS问题

C# ASP.NET-某些代码的安全性反映了XSS问题,c#,asp.net-mvc,security,checkmarx,secure-coding,C#,Asp.net Mvc,Security,Checkmarx,Secure Coding,在我工作的地方,他们使用一个名为checkmarx的应用程序来分析应用程序的安全性 在其中一个分析中,应用程序检测到以下问题: 反射XSS所有客户端: 应用程序的GetBarcosNaoVinculados将不受信任的数据嵌入到 使用Json生成的输出,位于 …/Controllers/AdminUserController.cs。此不受信任的数据是无效的 直接嵌入输出,无需适当消毒或 编码,使攻击者能够将恶意代码注入 输出。攻击者可以通过以下方式更改返回的网页: 只需在用户InputUsari

在我工作的地方,他们使用一个名为checkmarx的应用程序来分析应用程序的安全性

在其中一个分析中,应用程序检测到以下问题:

反射XSS所有客户端:

应用程序的GetBarcosNaoVinculados将不受信任的数据嵌入到 使用Json生成的输出,位于 …/Controllers/AdminUserController.cs。此不受信任的数据是无效的 直接嵌入输出,无需适当消毒或 编码,使攻击者能够将恶意代码注入 输出。攻击者可以通过以下方式更改返回的网页: 只需在用户InputUsarioid中提供修改后的数据,这是 由GetBarcosNaoVinculados方法在的第1243行读取 …/Controllers/AdminUserController.cs。然后,该输入流通过 将代码直接发送到输出网页,无需进行清理

在系统的其他地方,它给出了相同的问题,但使用这两种方法

应用程序的LoadCodeRve在生成的 带有SerializeObject的输出,位于的第738行 …/BR.Rve.UI.Site/Controllers/infoapontaintocontroller.cs。这 不受信任的数据直接嵌入到输出中,而无需进行适当的处理 净化或编码,使攻击者能够注入恶意 将代码插入到输出中。攻击者可以更改返回的 通过提前将恶意数据保存到数据存储中来创建网页。这个 然后,总线从数据库中读取攻击者修改的数据 方法,其中位于…/Repository/Repository.cs的第78行。这 然后,不受信任的数据通过代码直接流向输出web 页面,未经消毒

public虚拟IEnumerable总线车(Expressionpredicate)
返回Dbset.Where(谓词);
公共字符串LoadCodeRve()
返回JsonConvert.SerializeObject(项);

这似乎与对JSON格式的处理有关,有人知道如何处理这种类型的问题吗?

正如警告消息所示,您需要执行某种形式的输入验证(或清理),以及作为一种安全的编码最佳实践—在将输出呈现到页面之前进行输出编码。Checkmarx搜索这些“净化剂”的存在,这些在其Checkmarx查询中预定义。例如,使用AntiXSS库(即函数)

Checkmarx已经指出了需要注意的两条关键线:

return Json(barcosNaoVinculados, JsonRequestBehavior.AllowGet)

无论这些值(JSON或字符串)最终到达哪个页面,都需要对它们进行转义。现在,根据您使用的模板引擎,您可能已经获得了即时XSS保护。例如,当然,除非您使用Html.Raw助手方法

作为应用程序安全性的推动者,我们相信不信任输入并拥有防御层,因此我的建议是通过传入JsonSerializerSettings参数明确表示您希望对输出进行编码:

return JsonConvert.SerializeObject(items, new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeHtml });
这里唯一的困境是,Checkmarx可能不承认这是一种消毒剂,因为它可能不在他们预定义的消毒剂列表中。您可以始终将此解决方案作为参数提供给运行安全扫描的安全团队

对于JsonResult返回,您可能需要对barcosNaoVinculados变量进行javascript编码:

return Json(HttpUtility.JavaScriptStringEncode(barcosNaoVinculados), JsonRequestBehavior.AllowGet)

现在,这一点马克思可能也没有认识到。您可以尝试使用Checkmarx识别的软件包(即Encoder.JavascriptEncode或AntiXss.JavascriptEncode),但我认为这些Nuget软件包在您的项目类型中不起作用

我认为他应该首先解决问题。如果Checkmark没有确定解决方案,他需要在Checkmark产品中忽略此结果,并将案例发送给Checkmark公司。@roman Thx有关提示,我正在使用razor,我将尝试您指定的解决方案。关于JsonResult,我使用的是.net framework 4.6.1,在MS文档中,表明它是兼容的,我将测试并返回以将您的答案标记为解决方案
return JsonConvert.SerializeObject(items);
return JsonConvert.SerializeObject(items, new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeHtml });
return Json(HttpUtility.JavaScriptStringEncode(barcosNaoVinculados), JsonRequestBehavior.AllowGet)