설명
사용자 입력을 String(format:), NSString(format:), NSLog의 포맷 문자열로 사용하면 포맷 지정자가 해석되어 예외, 정보 노출, 로그 조작이 발생할 수 있습니다.
잠재적 영향
- 예외 또는 앱 중단
- 로그 조작
- 의도하지 않은 데이터 형식 처리
해결 방법
- 포맷 문자열은 정적인 상수로 유지합니다.
- 사용자 값은 포맷 인자로만 전달하고 포맷 문자열에 결합하거나 보간하지 않습니다.
- 로그 메시지는 구조화 로깅과 redaction 정책을 사용합니다.
예시
변경 전
swift
let message = String(format: userControlledFormat)
변경 후
swift
let message = String(format: "Hello %@", username)
설명:
- 변경 전: 사용자 입력이 포맷 문자열로 해석됩니다.
- 변경 후: 포맷 문자열은 고정하고 사용자 값은 인자로 전달합니다.