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