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

字符串输入参数的SSRF CheckMarx漏洞

汪信鸥
2023-03-14

我正在为我的一个项目运行CheckMarx扫描,它带有一个SSRF漏洞,用于方法的一个输入字符串参数。我的方法如下所示,参数param1抛出了SSRF漏洞。

public String method1(@WebParam(name = "param1") final String param1) {
    LOG.info("Inside method1...")
    if (StringUtils.isBlank(param1) || !StringUtils.isAlphanumeric(param1)) {
        throw new DataManipulationException();
    }
    // Call 3rd party here (method in line 87 below)
}

在该方法中,我使用HttpClient GetMethod调用一个第三方URL,并将param1作为查询字符串参数传递。

CheckMarx的SSRF是:

The application sends a request to a remote server, for some resource, using @DestinationElement in \src\com\test\Test.java:87. However, an attacker can control the target of the request, by sending a URL or other data in param1 at \src\com\test\Test.java:55.

在55号线,我有

public String method1(@WebParam(name = "param1") final String param1) {

在第87行我有

private String processRequest(final GetMethod method) throws IOException {

如果能帮助解决此SSRF漏洞,我们将不胜感激。谢谢你。

共有1个答案

白高逸
2023-03-14

要确认SSRF漏洞,还需要processRequest方法的代码片段。据我所知,CheckMarx报告了这个问题,因为“param1”应该包含第三方URL,应用程序正在使用该URL。缓解SSRF风险可能有以下几种可能性:

  • 是否需要第三方库来执行html" target="_blank">函数?如果否,那么您可以安全地删除该代码。
  • 如果您需要第三方,并且URL保持不变,那么您可以对该URL进行硬编码。
  • 如果你不能硬编码,并且它一直在变化,那么你能列出可能的第三方网址吗?所有可能的第三方URL必须手动审查,并执行白名单,以允许所需的URL。或者所有可能的URL都应该插入到后端的文件/数据库中,用户可以传递该特定URL的id。
  • 如果URL每次都在变化,并且没有办法白名单,你应该防止这种方法不会进一步伤害应用程序。在这种情况下,需要方法的代码片段,并且应该正确地检查方法。
 类似资料:
  • 问题内容: 我在JSF支持bean中具有以下方法: 我在数据表中显示此: 但是我得到以下异常: 它是怎么引起的,我该如何解决?\ 问题答案: 所以, 导致此: 您是否正在运行您认为正在运行的代码?的参与在堆栈跟踪指示是 实际上 像一个数组。数组值只能通过像整数索引来获得,但你用字符串访问它作为导致了这一例外。 确保返回,而不是,并且已将的正确版本声明为托管Bean。

  • 主要内容:字符串的输出,字符串的输入其实在《 C语言输入输出》一章中我们已经提到了如何输入输出字符串,但是那个时候我们还没有讲解字符串,大家理解的可能不透彻,所以本节我们有必要再深入和细化一下。 字符串的输出 在C语言中,有两个函数可以在控制台(显示器)上输出字符串,它们分别是: puts():输出字符串并自动换行,该函数只能输出字符串。 printf():通过格式控制符输出字符串,不能自动换行。除了字符串,printf() 还能输

  • 我想在我的java程序中添加更多的命令,我正在用unix编写,但是在传递参数时遇到了问题。我只是在unix中输入命令之前,将文本文件作为程序参数,工作正常,但想要求输入。试着自己解决,但对java来说有点陌生 我有, 效果很好,然后试了这个,失败了 所以我犯了这些错误 CPU. java: 24:错误:不兼容的类型int计数=scanner.next线();^必需:int找到:字符串CPU. ja

  • 问题内容: 所以,我有一个问题真的困扰我。我有一个用Java开发的简单解析器。这是相关代码: 输入文件是CSV文件,文件的第一项是整数。当我开始解析时,我立即得到这个异常: 我检查了文件,它的第一个值确实为1(该字段中没有其他字符),但仍然收到消息。我认为这可能是由于文件编码所致:它是UTF-8,带有Unix终端。该程序在Ubuntu 14.04上运行。欢迎寻找问题的任何建议。 问题答案: 您在该

  • 大家好,这是我在工作面试中遇到的一个基本问题,我正试图用Java实现输入字符串的所有排列,不幸的是,我无法实现这一点。

  • 嗨,我的代码有一些问题,我需要接受一个3行的输入,并计算输入中“$”的数量。输入方法未注释为“scanf(”%[]s“,&userinput);”是唯一一个我发现采取所有3行输入,但我不能打破输入循环继续我的程序。 任何帮助都将不胜感激