Найти ошибки безопасности - реальное внедрение SQL или ложное срабатывание?

Я использую FindBug вместе с плагином Find Security Bugs чтобы помочь мне найти недостатки безопасности в моем коде. Я не уверен, почему какой-то код помечен как уязвимый для внедрения SQL.

Вот два примера:

final StringBuilder queryString = new StringBuilder("SELECT users.login FROM Users users, Table table WHERE users.idUser = table.users.idUser");
Query query = session.createQuery(queryString.toString()); // This line is flagged


StringBuilder queryString = new StringBuilder("SELECT data FROM Table ");
queryString.append("WHERE table.idEntreprise = :id");
Query query = session.createQuery(queryString.toString()).setInteger("id", id); // This line is flagged

Это ложный позитив или я что-то пропустил? Если я правильно понимаю вопрос, используя createQuery() а также setX() должно быть достаточно?

1 ответ

Решение

Это ложный позитив. Параметры именованных запросов экранируются Hibernate, поэтому внедрение SQL невозможно.

Даже первый запрос без именованных параметров является безопасным, поскольку он не использует внешний ввод для users.idUser параметр.

Другие вопросы по тегам