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のソース文字列に連結して実行します。
  • 変更後: コードとデータを分けて渡します。

参考資料