Я обнаружил случай, когда FindBugs не обнаружил SQL-инъекцию в моем проекте.Проект построен с использованием Gradle и плагина FindBugs.Я использую Hibernate для подключения к БД.Ниже приведен раздел, содержащий 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-инъекцию для упомянутого мной раздела.Ниже приведен раздел плагина FindBugs под моим 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,
- Предупреждения о недопустимой практике - 6
- Предупреждения о корректности - 17
- Предупреждения об интернационализации - 31
- Предупреждения об уязвимости вредоносного кода - 52
- Предупреждения о производительности - 15
- Предупреждения об изворотливом коде - 46
Я ожидаю, что SQL-инъекция произойдет под Категория безопасности , которая не обнаружена,
Описание ошибки: FindBugs
Как это можно исправить или есть какой-то другой способ обнаружения инъекции SQLв моем проекте?