집 >데이터 베이스 >MySQL 튜토리얼 >SQL 주입을 방지하기 위해 Android SQL 쿼리의 IN 절을 안전하게 매개변수화하려면 어떻게 해야 합니까?
안전한 매개변수화된 IN 절
Android 개발에서는 SQL 쿼리에 동적 매개변수를 사용하여 IN 절이 포함되는 것이 일반적입니다. 그러나 매개변수를 쿼리에 직접 대체하면 보안이 손상되고 SQL 주입 취약점이 발생할 수 있습니다.
도전
문제는 데이터 무결성을 손상시키지 않고 IN 절을 안전하게 매개변수화하는 것입니다. 매개변수 값을 쿼리에 수동으로 연결하는 것은 안전하지 않으며 실수로 악의적인 SQL 명령이 실행되는 것을 방지하는 매개변수 바인딩의 목적을 무효화합니다.
해결책: 동적 물음표
안전한 솔루션은 쉼표로 구분된 물음표 문자열을 동적으로 생성하는 것입니다. 이 문자열은 원래 SQL 쿼리에 직접 삽입되어 자리 표시자 수가 제공된 매개변수 수와 일치하도록 할 수 있습니다. 작동 방식은 다음과 같습니다.
자리 표시자 생성기 만들기:
원하는 수의 자리 표시자를 허용하고 해당 수의 물음표(쉼표로 구분)가 포함된 문자열을 반환하는 함수 makePlaceholders(int len)
를 구현하세요.
매개변수화된 쿼리 구성: 생성된 IN 절에 물음표 문자열을 사용하여 SQL 쿼리를 작성합니다.
<code>String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";</code>
매개변수로 실행: 마지막으로 매개변수 바인딩 방식을 이용해 쿼리가 실행되고, 해당 값이 매개변수로 제공된다.
구현예
다음은 makePlaceholders
함수 구현 예입니다.
<code class="language-java">String makePlaceholders(int len) { if (len < 1) { throw new IllegalArgumentException("Length must be at least 1"); } StringBuilder sb = new StringBuilder(len * 2 - 1); sb.append("?"); for (int i = 1; i < len; i++) { sb.append(",?"); } return sb.toString(); }</code>
이 기술을 사용하면 IN 절을 안전하게 매개변수화하여 SQL 삽입 위험을 줄이고 데이터베이스 작업의 무결성을 보장할 수 있습니다.
위 내용은 SQL 주입을 방지하기 위해 Android SQL 쿼리의 IN 절을 안전하게 매개변수화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!