Swift Realm NoSQL 인젝션

Swift Realm NoSQL 인젝션

설명

Realm filter 조건 문자열에 사용자 입력을 결합하면 Realm predicate가 조작되어 권한 밖 데이터가 조회되거나 필터 조건이 우회될 수 있습니다.

잠재적 영향

  • 로컬 데이터베이스 필터 우회
  • 권한 밖 Realm 객체 조회
  • 민감 데이터 노출

해결 방법

  1. Realm filter 문자열은 정적으로 유지합니다.
  2. 사용자 값은 %@ 자리표시자와 별도 인자로 전달합니다.
  3. 필드명이나 정렬 기준은 허용 목록에서만 선택합니다.

예시

변경 전

swift
let matches = users.filter("name == '\(username)'")

변경 후

swift
let matches = users.filter("name == %@", username)

설명:

  • 변경 전: 사용자 입력이 Realm 조건식 일부가 됩니다.
  • 변경 후: 사용자 값은 조건식 구조와 분리됩니다.

참조