【问题标题】:SQL injection using PMD使用 PMD 进行 SQL 注入
【发布时间】:2019-02-27 14:44:52
【问题描述】:

我遇到了一种情况,即 FindBugs 无法在我的项目中检测到 SQL 注入。该项目包含多个带有 gradle 的 repo。有什么方法可以借助 PMD 进行识别吗?或者,如果您有任何选择,请建议我。

【问题讨论】:

  • 不要指望一个工具能找到你的代码的所有问题。在棘手的情况下,他们只能使用一些启发式方法。让规则过于严格会导致很多误报。做一些代码审查可能会更好。
  • 但是@Henry,在 FindBugs 文档部分明确指出它可以处理 SQL 注入,但它没有做它应该做的事情,我不知道为什么但没关系。如何使用 PMD 捕获 SQL 注入?

标签: java security sql-injection findbugs pmd


【解决方案1】:

所以我们都在同一个页面上:

像PMD这样的工具不可能找到所有的SQL注入错误。

工具可以发现一些明显错误的模式,但您无法通过手动搜索所有代码库(使用 grep 或 IDE)来查找包含“SELECT”、“INSERT”和“ UPDATE”并确保它们不是使用串联构建的。

PMD 等的价值不在于智力,而恰恰相反:他们愚蠢、狭隘的固执和坚持“以防万一”避免某些模式。

【讨论】:

    【解决方案2】:

    SQL 注入主要是 vul。为您的登录门户和链接打开 ?id 或类似的东西,我猜您不需要任何工具来获取它在 Java 中的补丁。 Sql-Injection 和 Blind SQL 都是由于使用 JDBC 的粗心代码实现造成的攻击。

    快速解决方法是,使用 PrepareStatement 更新所有现有的数据库调用,如果您有开放的 ID 网址,则对其应用适当的 encp/decp。

    【讨论】:

    • 我对我的代码非常谨慎,但如果我的代码中有一些 SQL 注入,我想如何捕获它。 PMD怎么办?
    • PMD 将分析您的代码。如何解决 PMD 突出显示的所有问题取决于您。
    • 如何显式指定PMD捕获SQL注入?
    【解决方案3】:

    您是否已经添加了Find Security Bugs?如果不是,你应该这样做,因为它可以检测到更多的安全风险——还有一些 SQL 注入风险。顺便提一句。你不应该再使用 FindBugs,使用它的后继者 SpotBugs - 上面的插件也适用于 SpotBugs。

    【讨论】:

      猜你喜欢
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多