2012-04-06 4 views
5

기사를 많이 읽었을 때 JPA/Hibernate 쿼리를 사용할 때 SQL 주입을 피할 수 있도록 내 쿼리에서 매개 변수를 설정하는 것이 좋습니다. Like :JPA 질의 - 위치 매개 변수에서의 SQL 주입 jpa 네이티브 질의

select user from User user where user.name = :name and user.surname = :surname 

내 문제는 내 쿼리를 만들 때 고유 쿼리를 사용해야하는 경우가 있습니다.

엔티티 관리자와 createNativeQuery을 사용할 것입니다. 그러나이 경우 매개 변수는 위치 적입니다. 마찬가지로 :

select * from users where user_name = ? and user_surname = ? 

그런 다음 내 쿼리에서 나는 매개 변수가있는 쿼리에서 같은 방법 setParameter(1, "name") 등 그래서이 경우 "SQL 인젝션 증거"를 사용할 것인가?

+1

예, 데이터로만 사용되도록 setParameter 메소드를 사용할 때 매개 변수를 올바르게 이스케이프 처리합니다. 사용자가 제공 한 매개 변수를 사용하여 문자열을 직접 작성하고 올바르게 이스케이프 처리하지 않으면 주입 취약점이 발생합니다. – kevingallagher

답변

4

당신이

처럼 쿼리를 구축하기위한 문자열 연산을 사용하지 않는 경우 해당 인수에 입력, 캐릭터 세트의 기대, 저장 프로 시저 및 엄격한 요구 사항을 필터링의 조합을 사용
"SELECT foo FROM bar Where id="+myParameter+" more sql ..." 

, 그러면 어떠한 취약점도 발생하지 않습니다.

1

현재 (내가 잘못하면 커뮤니티 수정) 최신 PDO 데이터베이스 추상화 계층에는 취약점이 존재하지 않습니다.

그러나 입력을 살균 및 필터링하면서 알려진 및 알 수없는 항목에 대한 쿼리를 테스트하면 제로 데이 공격이 발생할 경우 주입 가능성을 제거하는 데 도움이됩니다.

나는 현재 어떤 전에 모든 동적으로 생성 된 쿼리