【发布时间】:2023-03-26 05:43:01
【问题描述】:
我遇到过 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 下的 FindBugs 插件部分。
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 检测到的错误列表,
- 不良做法警告 - 6
- 正确性警告 - 17
- 国际化警告 - 31
- 恶意代码漏洞警告 - 52
- 性能警告 - 15
- 狡猾的代码警告 - 46
我希望 SQL 注入属于未检测到的安全类别,
如何解决这个问题,或者有什么其他方法可以在我的项目中检测到 SQL 注入?
【问题讨论】:
-
我认为这里没有任何SQL注入的机会。如果在 String 参数中传递了一些奇怪的东西,格式化程序将抛出异常并且整个方法将失败。如果传递了有效的日期文字,则其结果不可能包含任何可利用的代码。
-
您希望什么输入会导致 SQL 注入?请注意,您正在通过
DateFormat运行输入(至少我认为formatter是这样),除非您也收到模式作为输入,否则您应该是安全的。 -
@piet.t 让我们考虑输入的日期字段格式是否正确。格式化程序格式基于“yyyy-MM-dd HH:mm:ss”。
-
@a_horse_with_no_name 但是 Veracode 显示为 SQL 注入漏洞,这很严重。
-
那么 Veracode 过于谨慎,并没有考虑到将参数传递给返回非常明确的结果的函数这一事实。输入参数中的任何可利用代码究竟应该如何在从字符串到日期再到字符串的转换中幸存下来?
标签: java hibernate gradle findbugs