2015-01-20 2 views
3

Spring 용 @Query 주석에 전달 된 문자열의 매개 변수가 PreparedStatement 클래스 또는 SQL 주입을 방지하기위한 모든 메서드를 사용하는 것처럼 순수한 데이터로 처리됩니까?스프링 SQL 인젝션의 @Query 주석은 안전한가요?

final String MY_QUERY = "SELECT * FROM some_table WHERE some_column = ?1"; 

@Query(value=MY_QUERY, nativeQuery = true) 
List<SomeEntity> findResults(String potentiallyMaliciousUserInput); 

결론 :는 SQL 인젝션에 취약 위의 코드인가?

+0

MY_QUERY는 (정적이 아니어야합니까?) – tkr

+0

@tkr 예 그렇습니다. 쿼리에 피드되도록 쿼리 구성 요소를 동적으로 작성하려고 할 때 문제가 발생했습니다. 나는 매개 변수 만이 당신이 변화에 접근 할 수 있다고 믿습니다. –

+0

사실 이것은 의도적으로 생각합니다. 이렇게하면 문자열 연결을 사용하여 SQL을 빌드하지 않고 적절한 준비된 명령문 매개 변수를 사용하여 빌드 할 수 있습니다. (그러나 나는 확실히 모르겠다.) – tkr

답변

2

봄 데이터의 @Query이 그렇게 대답을 참조하십시오

JPA

주변 단지 래퍼 것 같습니다 : 쿼리에서 Are SQL injection attacks possible in JPA?

+0

질문의 예가 ​​안전하거나 안전하지 않습니까? – tkr

1

당신이 (SQL 인젝션에 취약 할 것이다) 대신 문자열 연결의 바인드 변수를 사용 , 그래서 나는 당신의 예가 SQL Injection의 취약점과 관련이 있다고 생각한다.