HTTPキャッシング


HTTPキャッシング

ウェブアプリで個人を特定できる顧客情報や機微な情報を扱う場合、ブラウザキャッシュの影響を考慮することが重要です。

: このページで言及している開発資料やツールは、Amazonではなく、サードパーティによって提供されています。ツールへのリンクをクリックすると、サードパーティのサイトに移動します。

一般的なベストプラクティス

デフォルトでは、サーバーからブラウザに情報が送信されると、将来のアクセス速度を上げるために応答をキャッシュします。速度も重要ですが、セキュリティが最も重要です。キャッシュされた情報はデバイスのブラウザに永続的に格納されるため、不正アクセスに対して脆弱になります。悪意のあるアプリがキャッシュされたデータにアクセスする可能性があります。

ほとんどの場合、静的なグラフィックなどのアセットはブラウザにキャッシュされていても安全です。ベストプラクティスとして、ログインで保護されている情報はキャッシュしないでください。このような情報をキャッシュすると、悪意のあるアプリに情報がさらされてしまいます。

ウェブサーバーからの応答がブラウザ(ネイティブブラウザまたはWebViewのいずれか)に格納されないようにするには、返されるHTTP(S)応答に次のヘッダーを追加します。

Cache-Control: no-cache

または

Cache-Control: no-store

詳細については、HTTPの仕様のセクション14.9を参照してください。

下位互換性のために、no cacheプラグマも同様に追加してください。

Pragma: no-cache

詳細については、HTTPの仕様のセクション14.32を参照してください。

これらのヘッダーを応答に追加する手順については、ウェブサーバーのドキュメントまたはアプリのコーディングに使用しているプログラミングフレームワークを参照してください。

Cookieとセキュリティ

SSLを使用してユーザーとの通信のセキュリティを保護している場合、格納しているCookieが意図していない用途で使用されないようにすることも重要です。たとえば、Cookieにログイントークンを保存している場合は、そのCookieをSecureとマークしてください。同様に、ページで実行されているJavaScriptからのアクセスを回避すべきCookieをサーバーが送信する場合は、クロスサイトスクリプト攻撃から防御するために、そのCookieをHttpOnlyとマークしてください(注: HttpOnlyのCookieはHTML5の仕様に含まれます)。

セキュアなCookieの詳細については、状態管理についてのHTTPの仕様を参照してください。

HttpOnlyのCookieは、HTML5の仕様で仕様を策定中です。

Amazon Web App Cache API

Amazonで配布されたウェブアプリの場合、有効なAPIを使用して埋め込みブラウザのキャッシュを消去できます。たとえば、ユーザーがアプリからログアウトすると、保存されたデータをデバイスから強制的に消去できます。そもそも重大な情報はキャッシュしないに越したことはありませんが、データの安全性を守ることに手を尽くし、ユーザーの信頼を確保するための便利なツールとして使用できます。

Amazon Web App Cacheのオブジェクト

Amazon Web App CacheのAPIを呼び出す前に、そのオブジェクトが存在することを確認する必要があります。そうすることで、アプリがラッパーなしで実行されても、適切な機能を確保できます。

document.addEventListener("amazonPlatformReady", function() {
                        if (amzn_wa.Cache != null) {
                            // 以下に記載のAPIを呼び出します
                        }
                    });

Amazon Web App Cacheオブジェクトのすべての呼び出しは、ラップされたアプリにのみ影響を及ぼします。そのほかのウェブアプリとネイティブブラウザには影響は及びません。

Amazon Web App Cacheのメソッドは次のとおりです。

  • amzn_wa.Cache.clearAppCache() - リソースのキャッシュを消去します。
  • amzn_wa.Cache.clearFormData() - ウェブフォームに保存されたデータを消去します。
  • amzn_wa.Cache.clearHistory() - 埋め込みブラウザに閲覧履歴を消去するように伝えます。
  • amzn_wa.Cache.clearAllCookies() - 埋め込みブラウザからすべてのCookieを消去します。
  • amzn_wa.Cache.clearExpiredCookies() - 埋め込みブラウザから有効期限の切れたCookieを強制的に消去します(有効期限の切れたCookieは要求があってもサーバーに送信されませんが、ガベージコレクションで削除されるまでデバイス上に残っている場合があります)。
  • amzn_wa.Cache.clearSessionCookies() - 埋め込みブラウザからすべてのセッションCookieを消去します。セッションCookieは、そのCookieが作成されたときに有効期限が使用されなかった場合に保持されます。