【问题标题】:False positives for SQL injection from find-sec-bugs来自 find-sec-bugs 的 SQL 注入误报
【发布时间】:2018-01-30 01:59:18
【问题描述】:

我们使用 find-sec-bugs 和 findbugs 来查找代码中的潜在问题。我们使用 Spring JDBCTemplate 进行数据库访问,find-sec-bugs 似乎认为我们到处都有 SQL 注入漏洞。最简单的例子如下:

public class MyDataRepo {
    private final String getDataSql;

    public PilotRepositoryImpl(DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
        getDataSql = "SELECT ID, FIRST_NAME, LAST_NAME, USERNAME, EMAIL FROM USERS WHERE COMPANY_ID = ? AND ID = ?";
        //...
    }

    public MyData getMyData(String companyId, UUID userId)
    {
        return jdbcTemplate.queryForObject(getDataSql, new Object[]{companyId, userId}, myDataRowMapper);
    }
}

这导致它认为它容易受到 SQL 注入的攻击,但显然不是(如果我错了,请纠正我)。

如果我将字符串直接复制并粘贴到这样的方法中:

return jdbcTemplate.queryForObject("SELECT ID, FIRST_NAME, LAST_NAME, USERNAME, EMAIL FROM USERS WHERE COMPANY_ID = ? AND ID = ?", new Object[]{companyId, userId}, myDataRowMapper);

然后它认为它很好。我喜欢在课堂顶部定义 SQL,而不是埋在每个方法中。我真的不想在任何地方都添加@SuppressFBWarnings,因为这几乎没有达到目的。

有没有更好的方法来解决这个问题?我们正在做的事情真的有问题吗?

【问题讨论】:

    标签: sql-injection spring-jdbc findbugs find-sec-bugs


    【解决方案1】:

    代码是安全的。 FSB 目前无法识别读取的字段是最终字段并且其来源是安全的。

    当这个问题得到修复时,这个误报最终将被忽略:https://github.com/find-sec-bugs/find-sec-bugs/issues/385

    【讨论】:

      【解决方案2】:

      我喜欢在课堂顶部定义 SQL,而不是埋在每个方法中。

      尝试使用静态方法而不是字段。

      public class MyDataRepo {
      
          private static String getDataSql() {
              return "SELECT ID, FIRST_NAME, LAST_NAME, USERNAME, EMAIL FROM USERS WHERE COMPANY_ID = ? AND ID = ?"
          }
      
          public PilotRepositoryImpl(DataSource dataSource) {
              jdbcTemplate = new JdbcTemplate(dataSource);
              //...
          }
      
          public MyData getMyData(String companyId, UUID userId) {
              return jdbcTemplate.queryForObject(getDataSql(), new Object[]{companyId, userId}, myDataRowMapper);
          }
      }
      

      这导致它认为它容易受到 SQL 注入的攻击,但显然不是(如果我错了,请纠正我)。

      我不反对,但更广泛的范围可能会招致更多的攻击媒介。

      【讨论】:

      • 您不应该修改您的代码以符合静态分析,除非它有真正的好处(除了不引发问题)。上面的代码也会引发问题。
      猜你喜欢
      • 2021-07-23
      • 2020-08-30
      • 2019-09-29
      • 1970-01-01
      • 2019-01-23
      • 2019-05-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多