【问题标题】:Findbugs not finding potential SQL injection vulnerabilityFindbugs 没有发现潜在的 SQL 注入漏洞
【发布时间】:2010-09-28 17:32:01
【问题描述】:

我刚刚为 Eclipse 安装了 FindBugs 插件,希望它能帮助我找到代码中的 SQL 注入漏洞。然而,它似乎并没有找到任何东西,即使我故意放了一些。

在以下示例中,假设 staticFinalBaseQuery 声明如下:

public static final String staticFinalBaseQuery = "SELECT foo FROM table where id = '";

并假设 userInputfilterString 是包装示例 sn-ps 的方法的参数。它直接来自用户输入,没有经过处理。

例如,下面的 sn -p 不会触发警告:

String query = staticFinalBaseQuery + userInputfilterString;
pstmt = dbConnection.prepareStatement(query);

其中staticFinalBaseQuery 是一个静态的最终字符串,userInputfilterString 是一个直接来自用户输入的字符串,仅在运行时可用,根本不会被清除。显然,这是一个漏洞。

我预计会触发“A prepared statement is generated from a nonconstant String”警告。

以下 sn-p 也不会引起警告(并不奇怪,因为它们的编译形式可能相同):

pstmt = dbConnection.prepareStatement(staticFinalBaseQuery + userInputfilterString);

但是,这会导致警告:

pstmt = dbConnection.prepareStatement(staticFinalBaseQuery + userInputfilterString + "'");

如果我附加一个空字符串或一个空格,则不会触发任何警告。

那么,我的问题是,如何让 FindBugs 在我的第一个示例中触发?我也很好奇为什么第一个不会引起警告,但最后一个会?

提前致谢!

编辑:我submitted a bug 到 FindBugs 的错误跟踪系统,看来这​​可能是一个错误。但是,如果有人有任何提示,我很乐意听到。

【问题讨论】:

  • 也许您应该将此作为错误报告给 FindBugs 的人?
  • 是的,也许我应该这样做。我想也许我只是用错了。如果是这种情况,他们可能想要更新文档。
  • 你能发布一下 staticFinalBaseQuery 和 userInputfilterString 是如何初始化的吗?
  • @Juha,我刚刚编辑了问题以显示这些论点的来源。

标签: java sql-injection findbugs


【解决方案1】:

这里很难区分安全代码和不安全代码。当然,userInputfilterString 可能是不安全的,但在编译时不可能确定这一点。但是,字符串连接中的单引号字符是使用可注入代码的标志。这就是为什么 FindBugs 在包含此字符的行上触发,而不是在仅字符串连接的行上触发。

基本上,这不是错误,而是软件可以检查 SQL 注入的能力的限制。由于字符串可能包含 anything(即它可能在另一个函数中存在易受攻击的连接),因此无法让该工具确定存在问题。

【讨论】:

  • 我刚刚编辑了问题以说明我希望 FindBugs 触发哪个检查,以及为什么我认为它应该将我的 sn-ps 显示为可能的错误。
  • 我基本同意这个答案,但是在调用preparetament时肯定会发生非常量的连接,所以我也希望触发检查。
【解决方案2】:

我认为PMDCheckstyle 也不会捕捉到它,但你可以尝试一下(我经常使用所有 3 个,很好用的工具)。

编辑:PMD 是正确的链接,但我称它为 findbugs... findbugs on the brain 我猜...

【讨论】:

    【解决方案3】:

    考虑升级到商业软件,例如 http://www.ouncelabs.com/,这将更好地服务于您的目的......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 2020-08-21
      • 2011-07-07
      • 2017-06-17
      • 2019-05-03
      • 1970-01-01
      • 2014-10-13
      相关资源
      最近更新 更多