【问题标题】:SonarQube rule: "Using command line arguments is security-sensitive" in Spring Boot applicationSonarQube 规则:Spring Boot 应用程序中的“使用命令行参数是安全敏感的”
【发布时间】:2020-01-08 14:44:59
【问题描述】:

SonarQube 只是在非常基本的 Spring Boot 应用程序中显示了一个严重的安全问题。在 main 方法中。

@SpringBootApplication
public class Application {

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

}

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

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

这里也提出了部分问题:SonarQube shows a secuirty error in Spring Framework controllers and in Spring Framework Application main class

是误报吗?

【问题讨论】:

  • 我在我们的任何启动应用程序中都没有看到任何 args 实例被清理。深入研究 SpringApplication 类中这些参数的用法。它们用于创建 SpringFactoriesInstances 。因此,除非您使用 args 变量在您的应用程序中配置某些内容,否则您可以选择不设置它(我猜这会消除错误)
  • @ArpanKanthal 是的,我也不是。在调用 Spring Boot 运行方法之前,我从未见过这样的事情。我昨天尝试快速阅读代码 Spring Boot,但无法深入挖掘以看到值得一看的东西。但是,我仍然感谢您的评论。我今天会更深入地检查一下。谢谢。
  • 此规则已弃用,最终将被删除。见:rules.sonarsource.com/java/RSPEC-4823
  • 问题是当您实际使用这些值之一时。在我的情况下,我正在测试参数,因为我需要有两种不同的方式来调用 SpringBootApplication 并且我需要扫描这些值。不幸的是,在我所处的位置,如果至少有任何警告,它被认为是完全不安全的,无法理性地评估它。

标签: java spring-boot sonarqube


【解决方案1】:

不使用命令行参数可以解决这个问题。

仅适用于声纳检查更改代码 来自:

SpringApplication.run(ApiDispatchApplication.class, args);

到:

SpringApplication.run(ApiDispatchApplication.class);

【讨论】:

    【解决方案2】:

    如果你确定,那么你可以包括以下内容来解决这个问题。

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

    根据声纳文档,这似乎被标记为security hotspot。它指出

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

    您可以在此处阅读更多信息security hotspot

    根据这条规则RSPEC-4823S4823,命令行参数将基于

    • 使用任何命令行参数而未经过清理 首先。
    • 您的应用程序通过命令行接受敏感信息 论据。

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

    【讨论】:

      【解决方案3】:

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

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

      这将消除声纳热点问题。

      【讨论】:

        【解决方案4】:

        不,这确实是一个关键的安全问题。它只是要求在使用 args 之前对其进行消毒。对于一个简单的应用程序,没有必要担心这样的问题,但对于生产应用程序来说,这可能是一件大事。

        更多详情请访问https://rules.sonarsource.com/java/RSPEC-4823?search=Make%20sure%20that%20command%20line%20arguments%20are%20used%20safely%20here

        【讨论】:

          猜你喜欢
          • 2017-03-08
          • 2015-09-17
          • 2020-01-10
          • 2017-01-01
          • 2020-12-13
          • 1970-01-01
          • 2019-10-09
          • 1970-01-01
          相关资源
          最近更新 更多