설명
Realm filter 조건 문자열에 사용자 입력을 결합하면 Realm predicate가 조작되어 권한 밖 데이터가 조회되거나 필터 조건이 우회될 수 있습니다.
잠재적 영향
- 로컬 데이터베이스 필터 우회
- 권한 밖 Realm 객체 조회
- 민감 데이터 노출
해결 방법
- Realm filter 문자열은 정적으로 유지합니다.
- 사용자 값은
%@자리표시자와 별도 인자로 전달합니다. - 필드명이나 정렬 기준은 허용 목록에서만 선택합니다.
예시
변경 전
swift
let matches = users.filter("name == '\(username)'")
변경 후
swift
let matches = users.filter("name == %@", username)
설명:
- 변경 전: 사용자 입력이 Realm 조건식 일부가 됩니다.
- 변경 후: 사용자 값은 조건식 구조와 분리됩니다.