계: Input Validation and Representation

입력 검증 및 표현 문제는 메타 문자, 대체 인코딩 및 숫자 표현 때문에 발생합니다. 보안 문제는 입력을 신뢰하기 때문에 발생합니다. 문제로는 "Buffer Overflows", "Cross-Site Scripting" 공격, "SQL Injection", 그 외 여러 가지가 있습니다.

Content Provider URI Injection

Abstract
사용자 입력을 포함하는 콘텐트 공급자 쿼리 문을 생성하면 공격자가 허가 받지 않은 레코드에 접근할 수 있습니다.
Explanation
Query string injection 취약점은 다음 경우에 발생합니다.

1. 신뢰할 수 없는 소스에서 데이터가 프로그램에 입력됩니다.



2. 데이터를 사용하여 콘텐트 공급자 쿼리 URI를 동적으로 생성합니다.



Android 콘텐트 공급자를 사용하는 개발자는 콘텐트 공급자 URI를 작성하는 것만으로 SQL 없이 쿼리를 작성할 수 있습니다. 콘텐트 공급자 URI는 주입 공격에 취약하므로 개발자는 메타 문자가 올바르게 검증 또는 인코딩되었는지 확인하지 않은 상태로 문자열 연결과 감염된 데이터 입력을 함께 사용하여 URI를 생성해서는 안 됩니다.

예제 1: 다음과 같은 URI에 여러 콘텐트 공급자를 노출하는 응용 프로그램이 있다고 가정해 보겠습니다.

content://my.authority/messagescontent://my.authority/messages/123content://my.authority/messages/deleted

개발자가 문자열을 연결하는 쿼리 URI를 작성하면 공격자는 경로에 슬래시를 포함하거나, 쿼리의 의미를 변경하는 다른 URI 메타 문자를 포함할 수 있습니다. 다음 코드 조각에서는 공격자가 값이 deleted인 msgld 코드를 제공하여 content://my.authority/messages/deleted를 호출할 수 있습니다.


// "msgId" is submitted by users
Uri dataUri = Uri.parse(WeatherContentProvider.CONTENT_URI + "/" + msgId);
Cursor wCursor1 = getContentResolver().query(dataUri, null, null, null, null);
desc.dataflow.java.content_provider_uri_injection