Swift 정규식 인젝션

Swift 정규식 인젝션

설명

사용자 입력을 정규식 패턴으로 직접 사용하면 공격자가 비싼 정규식이나 예기치 않은 패턴을 주입해 서비스 거부 또는 검증 우회를 유발할 수 있습니다.

잠재적 영향

  • 정규식 처리 지연으로 인한 서비스 거부
  • 입력 검증 우회
  • 예외 발생 또는 기능 중단

해결 방법

  1. 사용자 입력은 NSRegularExpression.escapedPattern(for:)로 이스케이프한 뒤 정규식에 포함합니다.
  2. 정규식 구조는 정적으로 유지하고 동적 조건은 허용 목록에서 선택합니다.
  3. 복잡한 패턴에는 길이 제한과 실행 시간 제한을 적용합니다.

예시

변경 전

swift
import Foundation
import UIKit

func buildRegex(inputField: UITextField) throws {
    let input = inputField.text ?? ""
    let regex = try NSRegularExpression(pattern: input)
}

변경 후

swift
import Foundation
import UIKit

func buildRegex(inputField: UITextField) throws {
    let input = inputField.text ?? ""
    let escaped = NSRegularExpression.escapedPattern(for: input)
    let regex = try NSRegularExpression(pattern: escaped)
}

설명:

  • 변경 전: 입력이 정규식 문법으로 해석됩니다.
  • 변경 후: 입력을 이스케이프해 리터럴 텍스트로 처리합니다.

전체 문자열 일치 여부 등 추가 검증 조건은 호출 목적에 맞게 별도로 적용해야 합니다.

참조