Вопрос

Я создаю веб-приложение 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».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top