Ответ 1
SQL-инъекция не должна представлять опасность при использовании Hibernate - если вы используете ее правильно.
Запросы на гибернацию либо записываются на языке запросов HQL (Hibernate SQL-like), либо реализованы с использованием объектно-ориентированного API критериев.
HQL является наиболее распространенным и наиболее рекомендуемым. Обычно вы должны написать запрос HQL следующим образом:
Subscription sub = (Subscription) sessionFactory.getCurrentSession()
.createQuery("from Subscription sub where sub.verification = :verification")
.setString("verification", verification)
.uniqueResult();
В этом виде вы защищены от SQL-инъекции, потому что Hibernate передает строку в качестве параметра; он не может быть интерпретирован как часть SQL.
Однако, если вы плохо себя чувствуете, напишите такой запрос...
Subscription sub = (Subscription) sessionFactory.getCurrentSession()
.createQuery("from Subscription sub where sub.verification = '" + verification + "'")
.uniqueResult();
... тогда вы не защищены от SQL-инъекции. Однако вы никогда не должны писать такие запросы! Я не думаю, что какая-либо инфраструктура защитит вас, если вы добавите строки к своим запросам.
Наконец, если вы используете API-интерфейс Hibernate, вы автоматически защищены от SQL-инъекции; потому что Hibernate строит базовый запрос, когда вы используете API критериев, он делает это таким образом, который предотвращает внедрение SQL.