Swift 제어되지 않은 포맷 문자열

Swift 제어되지 않은 포맷 문자열

설명

사용자 입력을 String(format:), NSString(format:), NSLog의 포맷 문자열로 사용하면 포맷 지정자가 해석되어 예외, 정보 노출, 로그 조작이 발생할 수 있습니다.

잠재적 영향

  • 예외 또는 앱 중단
  • 로그 조작
  • 의도하지 않은 데이터 형식 처리

해결 방법

  1. 포맷 문자열은 정적인 상수로 유지합니다.
  2. 사용자 값은 포맷 인자로만 전달하고 포맷 문자열에 결합하거나 보간하지 않습니다.
  3. 로그 메시지는 구조화 로깅과 redaction 정책을 사용합니다.

예시

변경 전

swift
let message = String(format: userControlledFormat)

변경 후

swift
let message = String(format: "Hello %@", username)

설명:

  • 변경 전: 사용자 입력이 포맷 문자열로 해석됩니다.
  • 변경 후: 포맷 문자열은 고정하고 사용자 값은 인자로 전달합니다.

참조