Hibernateを使用しているときは、SQLインジェクションは危険ではないはずです。
Hibernateクエリは、HQL(HibernateのSQLライクなクエリ言語)で記述されるか、オブジェクト指向のCriteria APIを使用して実装されます。
HQLが最も一般的であり、最も推奨されています。 Hibernateは、パラメータとして文字列を渡しているため、あなたはSQLインジェクションから保護されています。この形式では
Subscription sub = (Subscription) sessionFactory.getCurrentSession()
.createQuery("from Subscription sub where sub.verification = :verification")
.setString("verification", verification)
.uniqueResult();
;:通常は、このようなHQLクエリを記述しますそれはSQLの一部として解釈することはできません。
しかし、あなたがこのようなクエリを記述ひどく振る舞う場合...
Subscription sub = (Subscription) sessionFactory.getCurrentSession()
.createQuery("from Subscription sub where sub.verification = '" + verification + "'")
.uniqueResult();
は...あなたは、SQLインジェクションから保護されていません。しかし、あなたはこのような質問を書くべきではありません!文字列をクエリに追加すると、どのフレームワークもあなたを守るとは思えません。
最後に、Hibernate Criteria APIを使用すると、SQLインジェクションから自動的に保護されます。これは、Criteria APIを使用しているときにHibernateが基礎となるクエリを構築するため、SQLインジェクションを妨げるような方法で実行されます。