Android WebView は、サーバーがブラウザにコンテンツをキャッシュするように指示する特定の Cache-Control ヘッダで応答すると、データをキャッシュします。WebView が機密データを処理する場合、WebView が不要となった後にもデバイス (ディスクや RAM) に残らないようにする必要があります。
Cache-Control
機密データを含む API レスポンスで Cache-Control: no-cache などのヘッダを使用して、WebView にキャッシュしないように指示することにより、サーバーサイドのキャッシュ防止を優先します。
Cache-Control: no-cache
サーバーサイドのコントロールが不可能な場合、または補助的なコントロールとして、WebSettings.setCacheMode()arrow-up-right で WebSettings.LOAD_NO_CACHEarrow-up-right を明示的に設定するか、WebView の使用後 (WebView Activity の onDestroy ライフサイクル呼び出しなど) に WebView.clearCache(includeDiskFiles = true)arrow-up-right で WebView キャッシュをクリアすることで、このリスクを軽減します。但し、この手法には二つの欠点があります。
WebSettings.setCacheMode()
WebSettings.LOAD_NO_CACHE
onDestroy
WebView.clearCache(includeDiskFiles = true)
一つ目の欠点は、画像などのより大きなファイルなど、実際にキャッシュの恩恵を受ける非機密のアイテムを含め、すべてのキャッシュデータを無差別に削除することです。
二つ目の欠点は、特にアプリプロセスが突然終了した場合、clear メソッドが必ず呼び出されるという保証がないことです。この場合、次回のアプリ起動時などに、事前のキャッシュクリアとアクティブクリアを評価する必要があります。
WebView (WebViews)arrow-up-right では、WebView で使用されるさまざまなストレージ領域について説明しています。
Last updated 23 days ago