説明
WebViewClient.onReceivedSslError で handler.proceed() を呼ぶと、TLS証明書エラーがあってもWebViewはページの読み込みを続けます。本番環境では中間者攻撃につながり、信頼できないコンテンツを正規のページと誤認させるおそれがあります。
想定される影響
- HTTPS通信の盗聴や改ざん
- ログイン情報やセッショントークンの漏えい
- 悪意あるスクリプトの挿入
対処方法
- 証明書エラーが発生したら
handler.cancel()を呼び、読み込みを中止してください。 - 開発サーバーのテスト証明書が必要な場合は、Network Security Configの
debug-overridesでデバッグビルドだけにテストCAを信頼させてください。証明書エラー自体を無視しないでください。 - 証明書ピンニングが必要な場合は、Android Network Security Configを確認してください。
例
変更前
java
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
変更後
java
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.cancel();
}
解説:
- 変更前:
handler.proceed()がTLS証明書エラーを無視し、ページの読み込みを続けます。 - 変更後: 証明書エラー時に
handler.cancel()で読み込みを中止します。