Возможны ли атаки SQL-инъекции в JPA?
-
27-09-2019 - |
Вопрос
Я создаю веб-приложение Java, используя Java EE 6 и JSF-2.0, используя API настойчивости для всех операций базы данных.
Задний конец - MySQL, но я использовал функции EntiteManager и названные запросы в EJB-QL для всех операций. Возможны ли атаки SQL-инъекции в этом случае?
Решение
Возможно только если вы вкладываете переменные, управляемые пользователем в строке SQL / JPQL, например:
String sql = "SELECT u FROM User u WHERE id=" + id;
Если вы этого не делаете и используете только параметризованные / названные запросы, то вы в безопасности.
Другие советы
Да, это возможно. Это зависит от того, как вы реализуете.
Посмотри на Предотвращение инъекций в языке запросов JPA.
Если ваш провайдер JPA обрабатывает все входные аргументы для обработки нагрузочных атак, то вы должны быть покрыты. Мы делаем тонкие в EclipseLink.
Поскольку предыдущий плакат упоминается вместе, ваш собственный JPQL или SQL (для собственных запросов) может выставить вам.
Я бы порекомендовал использовать названные запросы с параметрами над ConcateNating Strings для создания JPQL / SQL.
Дуг
Если вы спрашиваете с наступательной / практической точки зрения, если оператор JPQL построен с пользовательского ввода, рассмотрите следующий пользовательский ввод:
blah') AND FUNCTION('user like chr(65)||chr(37) AND 42 - ', 1) > 40 AND ('42'='42
Если жертва использует реализацию JPA> = 2.1, а база данных Backenc является Oracle, что-то вроде вышесказанного может выступать в качестве логической инъекции SQL, чтобы сказать вам, если пользователь базы данных начинается с «A».