> 데이터 베이스 > MySQL 튜토리얼 > Android에서 SQL IN 절을 안전하게 매개변수화하는 방법은 무엇입니까?

Android에서 SQL IN 절을 안전하게 매개변수화하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-18 17:21:11
원래의
505명이 탐색했습니다.

How to Securely Parametrize the SQL IN Clause in Android?

Android SQL IN 절 보안

SQL 쿼리, 특히 IN 절을 사용하는 쿼리를 작성할 때 SQL 주입을 방지하는 것이 가장 중요합니다. 안드로이드의 rawQuery 방식은 자리 표시자(?)를 사용하는데, 이를 사용자가 제공한 데이터로 직접 대체하는 것은 심각한 보안 위험을 초래합니다.

강력한 솔루션에는 IN 절을 매개변수화하는 것이 포함됩니다. 이 접근 방식은 생성된 자리 표시자 문자열을 사용하여 SQL 쿼리 자체 내에 사용자 입력이 직접 포함되는 것을 방지합니다.

안전한 접근 방식:

  1. 자리 표시자 생성: 올바른 수의 자리 표시자(?)가 포함된 문자열을 만듭니다. makePlaceholders(int len)과 같은 도우미 함수는 쉼표로 구분된 len 물음표 문자열을 생성합니다. 이 기능은 자리 표시자 문자열의 형식이 일관되고 사용자 제공 데이터가 없도록 보장합니다.

  2. 쿼리 구성: 생성된 자리 표시자 문자열을 SQL 쿼리에 통합합니다.

    <code class="language-sql">String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";</code>
    로그인 후 복사
  3. 준비 및 바인딩: 쿼리를 준비하고 동적 값을 배열로 바인딩:

    <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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿