当前位置: 首页 > 知识库问答 >
问题:

ASP。NET安全性反映了某些代码的XSS问题

汪驰
2023-03-14

在我工作的地方,他们使用一个叫做Check marx的应用程序来分析应用程序的安全性

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

反射XSS所有客户端:

应用程序的GetBarcosNaoVinculados在生成的Json输出中嵌入不受信任的数据,位于/控制器/AdminUserController。反恐精英。这种不受信任的数据直接嵌入到输出中,而无需进行适当的清理或编码,从而使攻击者能够向输出中注入恶意代码。攻击者只需在用户InputUsarioid中提供修改后的数据,即可更改返回的网页,该数据由GetBarcosNaoVinculados方法在…的第1243行读取/控制器/AdminUserController。反恐精英。然后,该输入通过代码直接流到输出网页,无需消毒。

public JsonResult GetBarcosNaoVinculados(string usuarioId)              
.....
.....
 return Json(barcosNaoVinculados, JsonRequestBehavior.AllowGet)

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

应用程序的LoadCodeRve将不可信的数据嵌入到使用SerializeObject生成的输出中,位于... /BR.Rve.UI. Site/Controller/InfoApontamentoC的第738行ontroller.cs.此不可信的数据直接嵌入到输出中,而无需进行适当的清理或编码,从而使攻击者能够将恶意代码注入到输出中。攻击者可以通过提前将恶意数据保存在数据存储中来更改返回的网页。然后,攻击者修改后的数据通过Buscar方法从数据库中读取,该方法在... /Repository/R的第78行中带有“何处”epository.cs.此不可信的数据随后通过代码直接流到输出网页,而无需进行清理。

public virtual IEnumerable<TEntity> Buscar(Expression<Func<TEntity, bool>>predicate)
   return Dbset.Where(predicate);

public string LoadCodeRve()
  return JsonConvert.SerializeObject(items);

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

共有1个答案

易骁
2023-03-14

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

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

return Json(barcosNaoVinculados, JsonRequestBehavior.AllowGet)

return JsonConvert.SerializeObject(items);

无论这些值(JSON或字符串)最终会出现在哪个页面,它们都需要转义。现在,根据您使用的模板引擎,您可能已经获得了即时XSS保护。例如,“MVC中使用的Razor引擎会自动对来自变量的所有输出进行编码,除非您非常努力地阻止它这样做。”当然,除非你使用了Html。原始辅助方法。

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

return JsonConvert.SerializeObject(items, new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeHtml });

这里唯一的难题是Checkmarx可能无法识别这是一种消毒剂,因为它可能不在他们预定义的消毒剂列表中。您可以随时将此解决方案作为参数提交给运行安全扫描的安全团队

对于JsonResult返回的情况,您可能希望javascript编码barcosNaoVinculados变量:

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

现在,这也是Checkmarx可能无法识别的。您可以尝试使用Checkmarx识别的包(即编码器。JavascriptEncode或AntiXss。JavascriptEncode),但我认为这些Nuget包在您的项目类型中不起作用

 类似资料:
  • 问题内容: 除了迷惑之外,还有其他方法可以防止罐子被其他人打开吗?问题是我不希望任何人访问代码,这就是为什么我不喜欢Java。从我使用的反编译器来看,用C#和Java编写的程序具有完好无损的功能,就像变量名一样,这使得访问非免费程序变得容易。更糟糕的是,给出源代码。 问题答案: 上面的评论涵盖了大多数这些要点,但是我将在这里对其进行扩展: 如果您的代码在用户的计算机上运行,​​则用户可以反编译您的

  • 前言 面试中的安全问题,明确来说,就两个方面: CSRF:基本概念、攻击方式、防御措施 XSS:基本概念、攻击方式、防御措施 这两个问题,一般不会问太难。 有人问:SQL注入算吗?答案:这个其实跟前端的关系不是很大。 CSRF 问的不难,一般问: CSRF的基本概念、缩写、全称 攻击原理 防御措施 如果把攻击原理和防御措施掌握好,基本没什么问题。 1、CSRF的基本概念、缩写、全称 CSRF(Cr

  • 问题内容: 是否可以为特定的代码块关闭声纳(www.sonarsource.org)测量,而哪些是不想测量的? 一个示例是Findbugs输出的“保留堆栈跟踪”警告。离开服务器时,如果客户端不知道该异常,我可能只想将消息传递回客户端,而不包括我刚刚捕获的实际异常(因为该客户端没有该JAR,例如包含例外)。 问题答案: 这是一个常见问题解答。您可以在线上触发警告。我更喜欢使用FindBugs机制,该

  • 我们正在研究安全预防,并且在下面的代码中,正在提供存储的XSS攻击……下面是我们从Checkmark工具获得的信息。 method从数据库中获取的数据。然后,该元素的值在没有正确过滤或编码的情况下流过代码,最终在method中显示给用户。这可能会启用存储跨站点脚本攻击。

  • 在Spring Boot 1.5.x中,我已经配置了安全性,并且在某些概要文件(例如local)中,我在。properties文件中添加了行,以禁用该概要文件的所有安全性。我正在尝试迁移到新的Spring Boot2,在那里该配置属性被删除。如何在Spring Boot 2.0.x中实现相同的行为(不使用此属性)? 我已经阅读了spring-boot-security-2.0和security-c

  • 本文向大家介绍ASP net core有哪些好的功能?相关面试题,主要包含被问及ASP net core有哪些好的功能?时的应答技巧和注意事项,需要的朋友参考一下 第一是依赖注入。 第二是日志系统架构。 第三是引入了一个跨平台的网络服务器,kestrel。可以没有iis, apache和nginx就可以单独运行。 第四是可以使用命令行创建应用。 第五是使用APP settings json fil