준비된 문을 사용한 변수 열 이름
문제:
변수 열 이름을 지정할 수 있습니까? SQL 주입을 방지하기 위해 Java를 사용하여 MySQL에서 준비된 명령문을 활용할 때 취약점?
설명:
준비된 문은 기본 쿼리 문에서 쿼리 매개 변수를 분리하여 SQL 삽입을 방지하도록 설계되었습니다. 준비된 문을 사용하려고 하면 열 이름이 매개 변수로 인식되지 않고 대신 리터럴 값으로 쿼리에 삽입됩니다. 제공된 열 이름이 제대로 삭제되지 않으면 보안 문제가 발생할 수 있습니다.
해결책:
// Sanitize the user-provided column names String sanitizedColumns = columnNames.replace("'", "\'"); // Build the SQL query string String query = "SELECT a,b,c,ROW_NUMBER() OVER(), " + sanitizedColumns + " FROM " + name + " WHERE d=?"; // Prepare the statement stmt = conn.prepareStatement(query); stmt.setString(1, "x");
위 내용은 Java의 준비된 문이 MySQL에서 변수 열 이름을 안전하게 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!