Swift WebView JavaScript 동적 평가

WebView JavaScript 동적 평가

설명

WKWebView.evaluateJavaScript에 문자열 결합 또는 보간으로 만든 스크립트를 전달하면 외부 입력이 JavaScript 코드로 실행되어 WebView 컨텍스트에서 코드 삽입이 발생할 수 있습니다.

잠재적 영향

  • WebView JavaScript 코드 삽입
  • 로컬 데이터 탈취
  • 사용자 세션 또는 화면 조작

해결 방법

  1. evaluateJavaScript에는 정적인 스크립트만 전달합니다.
  2. 외부 데이터는 callAsyncJavaScript의 arguments 딕셔너리처럼 코드와 데이터를 분리하는 API로 전달합니다.
  3. 사용자 입력을 JavaScript 소스 문자열에 결합하거나 보간하지 않습니다.

예시

변경 전

swift
webView.evaluateJavaScript("console.log(" + remoteData + ")")

변경 후

swift
try await webView.callAsyncJavaScript(
    "console.log(data)",
    arguments: ["data": remoteData],
    contentWorld: .page
)

설명:

  • 변경 전: 외부 데이터를 JavaScript 코드 문자열에 결합해 실행합니다.
  • 변경 후: 코드와 데이터를 분리해 전달합니다.

참조