> 데이터 베이스 > MySQL 튜토리얼 > SQL 주입을 방지하기 위해 Android SQL 쿼리의 IN 절을 안전하게 매개변수화하려면 어떻게 해야 합니까?

SQL 주입을 방지하기 위해 Android SQL 쿼리의 IN 절을 안전하게 매개변수화하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2025-01-18 17:11:13
원래의
759명이 탐색했습니다.

How Can I Securely Parametrize IN Clauses in Android SQL Queries to Prevent SQL Injection?

안전한 매개변수화된 IN 절

Android 개발에서는 SQL 쿼리에 동적 매개변수를 사용하여 IN 절이 포함되는 것이 일반적입니다. 그러나 매개변수를 쿼리에 직접 대체하면 보안이 손상되고 SQL 주입 취약점이 발생할 수 있습니다.

도전

문제는 데이터 무결성을 손상시키지 않고 IN 절을 안전하게 매개변수화하는 것입니다. 매개변수 값을 쿼리에 수동으로 연결하는 것은 안전하지 않으며 실수로 악의적인 SQL 명령이 실행되는 것을 방지하는 매개변수 바인딩의 목적을 무효화합니다.

해결책: 동적 물음표

안전한 솔루션은 쉼표로 구분된 물음표 문자열을 동적으로 생성하는 것입니다. 이 문자열은 원래 SQL 쿼리에 직접 삽입되어 자리 표시자 수가 제공된 매개변수 수와 일치하도록 할 수 있습니다. 작동 방식은 다음과 같습니다.

  1. 자리 표시자 생성기 만들기: 원하는 수의 자리 표시자를 허용하고 해당 수의 물음표(쉼표로 구분)가 포함된 문자열을 반환하는 함수 makePlaceholders(int len)를 구현하세요.

  2. 매개변수화된 쿼리 구성: 생성된 IN 절에 물음표 문자열을 사용하여 SQL 쿼리를 작성합니다.

    <code>String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";</code>
    로그인 후 복사
  3. 매개변수로 실행: 마지막으로 매개변수 바인딩 방식을 이용해 쿼리가 실행되고, 해당 값이 매개변수로 제공된다.

구현예

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

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