説明
文字列の連結や補間で組み立てたスクリプトを WKWebView.evaluateJavaScript に渡すと、外部入力がJavaScriptとして実行され、WebView内でのコードインジェクションにつながるおそれがあります。
想定される影響
- WebView内へのJavaScriptの挿入
- ローカルデータの窃取
- ユーザーセッションや表示内容の改ざん
対処方法
evaluateJavaScriptには固定されたスクリプトだけを渡します。- 外部データは、
callAsyncJavaScriptのarguments辞書など、コードとデータを分離するAPIで渡します。 - JavaScriptのソース文字列にユーザー入力を連結したり埋め込んだりしないでください。
例
変更前
swift
webView.evaluateJavaScript("console.log(" + remoteData + ")")
変更後
swift
try await webView.callAsyncJavaScript(
"console.log(data)",
arguments: ["data": remoteData],
contentWorld: .page
)
説明:
- 変更前: 外部データをJavaScriptのソース文字列に連結して実行します。
- 変更後: コードとデータを分けて渡します。