Возможны ли инъекции SQL-инъекций в JPA?
Я создаю Java-приложение Java с использованием Java EE 6 и JSF-2.0, используя API-интерфейс persistence для всех операций с базой данных.
Back-end - это MySQL, но я использовал функции EntityManager и Named Queries в EJB-QL для всех операций. Возможны ли инъекции SQL-инъекций в этом случае?
Ответы
Ответ 1
Это возможно только в том случае, если вы вставляете контролируемые пользователем переменные в строку SQL/JPQL, например:
String sql = "SELECT u FROM User u WHERE id=" + id;
Если вы этого не делаете и используете только параметризованные/именованные запросы, тогда вы в безопасности.
Ответ 2
Да, это возможно. Это зависит от того, как вы реализуете.
Посмотрите Предотвращение инъекции на языке запросов JPA.
Ответ 3
Если ваш поставщик JPA обрабатывает все входные аргументы для обработки инъекционных атак, вы должны быть защищены. Мы делаем тонкие в EclipseLink.
Как и предыдущий плакат, связанный с вашим собственным JPQL или SQL (для собственных запросов), вы можете разоблачить вас.
Я бы рекомендовал использовать именованные запросы с параметрами для конкатенации строк для создания JPQL/SQL.
Дуга