PreparedStatement? 네 그럼요. 하지만 한 가지 더 단계가 있다고 생각합니다. UI에서 입력을 검증하고 데이터베이스에 접근하기 전에 객체에 바인딩하는 것입니다.
내가 PreparedStatement의의 String 여전히 SQL 주입 공격에 취약 당신을 떠날 수있는 바인딩 위치를 확인할 수 있습니다 :이 원격 인 경우
String userInput = "Bob; DELETE FROM FOO";
String query = "SELECT * FROM FOO WHERE NAME = ?";
PreparedStatement ps = connection.prepareStatement(query);
ps.setString(1, userInput);
ps.executeQuery();
나는 그것을 자신을 시도하지 않은 것을 인정 돼했지만, PreparedStatement는 필요하지만 충분하지 않다고 말할 수 있습니다. 서버 측에서 검증 및 바인딩이 중요합니다.
스프링의 바인딩 API를 사용하는 것이 좋습니다.
이것은 준비된 진술이 보호하려는 공격 유형과 정확히 같습니다. 그것은 탈출 할 것이다; – danieltalsky
기술적으로 PreparedStatement 인터페이스는 그것을 보장하지 않습니다. 운전 기사가 다른 것을 시도하더라도 새로운 공급 업체를 찾으십시오. –
@ 다니엘 - 나는 그것을 시도하고 나 자신을 위해보아야 할 것입니다. 내가 맞는지 여부에 관계없이 서버 측 유효성 검사가 여전히 좋은 생각인지 동의하지 않습니까? – duffymo