2014-12-23 2 views
0
public ResultSet queryResult(Connection con, String query) throws SQLException 
{ 
    Statement s = con.createStatement(); 
    ResultSet results = s.executeQuery(query); 
    return results; 
} 

이 메소드는 유효성이 확인되지 않은 입력을 사용하여 작성된 SQL 조회를 호출합니다. 이 호출은 공격자 이 명령문의 의미를 수정하거나 임의의 SQL 명령을 실행할 수있게합니다.SQL 인젝션을 피하기 위해 SQL 쿼리에서 입력 매개 변수의 유효성을 검사하는 방법은 무엇입니까?

SQL 인젝션을 피하기 위해 SQL 쿼리에서 입력 매개 변수의 유효성을 검사하는 방법은 무엇입니까?

+2

SQL 삽입을 방지하려면 Parameterized 문을 사용하십시오. Raed : http://msdn.microsoft.com/en-us/library/ff648339.aspx –

+0

어떤 종류의 입력 매개 변수입니까? 메서드는 일반 텍스트 SQL 쿼리를 받아들이고 실행합니다. 그것을 어떻게 검증하고 싶습니까? –

+0

@default 결과는 "FORTIFY STATIC CODE ANALYZER"에 의해 생성됩니다. 또한 입력을 검증하는 방법을 모르겠습니다. – Leo

답변

1

Java로 작업한다고 가정하면 Prepared Statements를 사용해야합니다. 준비된 명령문은 사전 컴파일 된 명령문 (동적 SQL 문과 반대)입니다. 매개 변수를 삽입하려는 문에서 특정 지점을 정의 할 수 있습니다 (예 : 매개 변수 표시 자?). 그런 다음 코드에서이 미리 정의 된 매개 변수 마커 (예 : 사용자 ID 및 암호)에 값을 할당 (바인딩) 할 수 있습니다. 그러한 문장에서는 SQL 삽입을 수행 할 수 없습니다.

PreparedStatement stmt = connection.prepareStatement("SELECT * FROM users WHERE userid=? AND password=?"); 
stmt.setString(1, userid); 
stmt.setString(2, password); 
ResultSet rs = stmt.executeQuery(); 
관련 문제