최대 절전 모드를 사용할 때 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 인젝션을 방해하는 방식으로 Hibernate가이를 수행하기 때문이다.