SonarQube规则:Spring Boot应用程序中“使用命令行参数对安全敏感”

lev*_*ver 6 java spring-boot sonarqube

SonarQube刚刚在非常基本的Spring Boot应用程序中显示了严重的安全问题。在主要方法上。

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
Run Code Online (Sandbox Code Playgroud)

SonarQube要我 Make sure that command line arguments are used safely here.

我在StackOverflow和Google上都进行了搜索,但令我惊讶的是我找不到关于此问题的任何评论。我几乎可以确定该SpringApplication.run方法内部已经进行了一些安全检查。而且,我什至不记得有人在调用之前清理了主方法的参数SpringApplication.run。我只是想将其标记为误报并继续。

在这里也要问这个问题的一部分:SonarQube在Spring Framework控制器和Spring Framework Application主类中显示安全错误。

是假阳性吗?

sac*_*hin 19

如果你没有使用任何命令行参数,那么你可以避免在 run 方法中提到 args 参数。就像下面的代码。

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

}
Run Code Online (Sandbox Code Playgroud)

这将消除声纳热点问题。


Cod*_*der 9

如果您确定,那么您可以包含以下内容来解决问题。

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

}
Run Code Online (Sandbox Code Playgroud)

看来这被标记security hotspot为根据声纳文档。它指出

与漏洞不同,安全热点不一定是容易受到攻击的问题。相反,安全热点突出显示需要手动审查的安全敏感代码段。经过审查,您会发现需要修复的漏洞或不存在威胁​​。

您可以在此处阅读有关它的更多信息security hotspot

根据此规则RSPEC-4823S4823,命令行参数将根据

  • 使用任何命令行参数时都没有先清理。
  • 您的应用程序通过命令行参数接受敏感信息。

如果您的应用程序属于此类别,它们绝对是您的应用程序可能存在的安全问题。


小智 2

不,这确实是一个关键的安全问题。它只是要求在使用之前清理参数。对于简单的应用程序来说没有必要担心这样的问题,但是对于生产应用程序来说这可能是一个大问题。

更多详细信息可以在https://rules.sonarsource.com/java/RSPEC-4823?search=Make%20sure%20that%20command%20line%20arguments%20are%20used%20safely%20here上找到。