首页 > 解决方案 > FindBugs 未检测到 SQL 注入

问题描述

我遇到过 FindBugs 没有在我的项目中检测到 SQL 注入的情况。项目是使用 Gradle 构建的,并使用了 FindBugs 插件。我正在使用休眠连接到数据库。下面是包含 SQL 注入的部分,

public List<String> fetchApplicationRequests(String applicationId,
        String fromDate, String toDate) throws ParseException {
    String sb = "SELECT * FROM table where applicationid = " + applicationId;
    Query query = getCurrentSession().createQuery(sb);
    query.setParameter("appId", applicationId);
    return (List<String>) query.list();
}

很明显,上面的部分显示了一个 SQL 注入。当我使用 Veracode 运行同一个项目时,它显示了我提到的部分的 SQL 注入。下面是我的build.gradle.

apply plugin: "findbugs"

findbugs {
  toolVersion = '3.0.1'
  effort = "max"
  ignoreFailures = true
  findbugsTest.enabled = false
}
tasks.withType(FindBugs) {
  reports {
      xml.enabled = false
      html.enabled = true
 }
}

当我运行命令时:

> ./gradlew clean build

它显示了在我的项目中发现的错误列表build/reports/findbugs/main.html

下面是 FindBugs 检测到的错误列表,

我希望 SQL 注入属于未检测到的安全类别

错误描述:FindBugs

如何解决这个问题,或者有什么其他方法可以在我的项目中检测到 SQL 注入?

标签: javahibernategradlefindbugs

解决方案


升级到 SpotBugs 3.1.7 并找到secbugs-plugin-1.8.0.jar。然后你得到

This use of org/hibernate/Session.createQuery(Ljava/lang/String;)Lorg/hibernate/Query; can be vulnerable to SQL/HQL injection

为线

Query query = ...

(然后重写你的代码,当然:))


推荐阅读