설명
WKWebView 또는 UIWebView에 신뢰할 수 없는 HTML을 로드하면 스크립트나 리소스 요청을 통해 데이터가 노출될 수 있습니다. baseURL은 상대 URL을 해석하는 기준이므로 nil이나 공격자가 정한 값에 의존하지 말고 명시적으로 설정하세요. 실제 로컬 파일 접근 가능 여부는 WebView 종류와 설정에 따라 달라집니다.
잠재적 영향
- WebView 기반 크로스 사이트 스크립팅
- 로컬 파일 또는 앱 데이터 접근 위험 증가
- 공격자 제어 URL로 데이터 유출
해결 방법
- HTML 문자열을 로드할 때
baseURL을about:blank또는 앱이 제어하는 안전한 URL로 지정합니다. - 사용자 제어 HTML은 로드 전에 신뢰 경계를 분리하고 필요한 경우 HTML 정화 또는 템플릿 렌더링을 적용합니다.
- 로컬 파일 접근이 필요하면 허용 범위를 최소화한 WebKit API를 사용합니다.
예시
변경 전
swift
webView.loadHTMLString(html, baseURL: nil)
변경 후
swift
import WebKit
func loadTrustedContent(in webView: WKWebView) {
let trustedHTML = "<p>Content generated by the application</p>"
webView.loadHTMLString(
trustedHTML,
baseURL: URL(string: "about:blank"))
}
설명:
- 변경 전: HTML의 신뢰성을 확인하지 않고 상대 URL의 기준도 명시하지 않습니다.
nil만으로 로컬 파일 접근 권한이 생긴다고 단정할 수는 없습니다. - 변경 후: 앱이 생성한 신뢰된 HTML에 명시적인 기준 URL을 사용합니다.
about:blank를 지정하는 것만으로 사용자 제어 HTML의 스크립트나 절대 URL이 정화되지는 않으므로, 외부 HTML이 필요하면 별도 정화와 WebView 정책 제한도 적용해야 합니다.