Android SQL IN 절 보안
SQL 쿼리, 특히 IN
절을 사용하는 쿼리를 작성할 때 SQL 주입을 방지하는 것이 가장 중요합니다. 안드로이드의 rawQuery
방식은 자리 표시자(?)를 사용하는데, 이를 사용자가 제공한 데이터로 직접 대체하는 것은 심각한 보안 위험을 초래합니다.
강력한 솔루션에는 IN
절을 매개변수화하는 것이 포함됩니다. 이 접근 방식은 생성된 자리 표시자 문자열을 사용하여 SQL 쿼리 자체 내에 사용자 입력이 직접 포함되는 것을 방지합니다.
안전한 접근 방식:
자리 표시자 생성: 올바른 수의 자리 표시자(?)가 포함된 문자열을 만듭니다. makePlaceholders(int len)
과 같은 도우미 함수는 쉼표로 구분된 len
물음표 문자열을 생성합니다. 이 기능은 자리 표시자 문자열의 형식이 일관되고 사용자 제공 데이터가 없도록 보장합니다.
쿼리 구성: 생성된 자리 표시자 문자열을 SQL 쿼리에 통합합니다.
<code class="language-sql">String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";</code>
준비 및 바인딩: 쿼리를 준비하고 동적 값을 배열로 바인딩:
<code class="language-java">Cursor cursor = mDb.rawQuery(query, names);</code>
결정적으로 names
배열의 값 개수는 생성된 자리 표시자 개수와 정확히 일치해야 합니다.
코드 예:
다음은 makePlaceholders
함수 구현 예입니다.
<code class="language-java">public static String makePlaceholders(int len) { StringBuilder sb = new StringBuilder(len * 2 - 1); sb.append("?"); for (int i = 1; i < len; i++) { sb.append(",?"); } return sb.toString(); }</code>
이 방법은 자리 표시자 문자열을 동적으로 구성하여 안전한 쿼리 실행을 보장합니다. 매개변수화된 쿼리를 사용하면 SQL 삽입 취약점을 효과적으로 완화하고 Android 데이터베이스를 보호할 수 있습니다.
위 내용은 Android에서 SQL IN 절을 안전하게 매개변수화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!