19
스프링의 JdbcTemplate 추상화는 많은 기능을 제공하지만 SQL 주입 공격으로부터 보호 할 수있는 방식으로 사용할 수 있습니까?Spring JDBC는 SQL 삽입 공격으로부터 어떤 보호 기능을 제공합니까?
예를 들어 보호의 종류처럼 적절하게 정의 된 매개 변수화를 사용하면 PreparedStatement을 사용할 수 있습니다.
스프링의 JdbcTemplate 추상화는 많은 기능을 제공하지만 SQL 주입 공격으로부터 보호 할 수있는 방식으로 사용할 수 있습니까?Spring JDBC는 SQL 삽입 공격으로부터 어떤 보호 기능을 제공합니까?
예를 들어 보호의 종류처럼 적절하게 정의 된 매개 변수화를 사용하면 PreparedStatement을 사용할 수 있습니다.
가장 확실합니다. 강하게 호의가 당신을 위해 무대 뒤에서 사용해야합니다 문을 (준비 ,
String lastName = this.jdbcTemplate.queryForObject(
"select last_name from t_actor where id = ?",
String.class, 1212L);
당신이 볼 수 있듯이 :이 예는 (2 *에서 동일하지만입니다) 봄 3.0 문서에서 직선) : 자리 표시 자 (?
)로 매개 변수를 지정하고 매개 변수를 채울 객체 배열을 제공합니다. (마지막 매개 변수는 예상 결과의 유형이지만이 질문과 관련이 없습니다.)
NamedParameterJdbcTemplate
을 사용하고 Map
의 매개 변수를 제공 할 수 있습니다.이 매개 변수는 덜 효율적이지만 분명히 니모닉이 더 큽니다.
차갑다 - 가장 중요한 점은 Spring의 API에서 매개 변수화 된 메소드를 사용하면 보호가 유지되는 방식으로 기본 Java PreparedStatement의 매개 변수화 된 메소드에 확실히 매핑된다는 것이다. – Brabster
그들은해야한다; Spring은 모범 사례를보다 편리하게 구현하는 것에 관한 것이고 PreparedStatement를 사용하는 것이 좋습니다 ... 저는 Java 1.1에서 처음으로 만난 JDBC의 첫 번째 버전에서 충고하는 것을 기억합니다. (모든 JDBC 드라이버가 올바르게 작동하는지 모르겠지만 사용하지 않을 경우 그 이유를 고려하지 않을 것입니다.) –