HTTPキャッシング
ウェブアプリで個人を特定できる顧客情報や機密情報を扱う場合、ブラウザキャッシュの影響を考慮することが重要です。
一般的なベストプラクティス
デフォルトでは、サーバーからブラウザに情報が送信されると、将来のアクセス速度を上げるために応答がキャッシュされます。速度も重要ですが、セキュリティが最も重要です。キャッシュされた情報はデバイスのブラウザに永続的に格納されるため、不正アクセスに対して脆弱になります。悪意のあるアプリがキャッシュされたデータにアクセスする可能性があります。
ほとんどの場合、静的なグラフィックなどのアセットはブラウザにキャッシュされていても安全です。ベストプラクティスとして、ログインで保護されている情報はキャッシュしないでください。このような情報をキャッシュすると、悪意のあるアプリに情報がさらされてしまいます。
ウェブサーバーからの応答がブラウザ(ネイティブブラウザまたは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が作成されたときに有効期限が使用されなかった場合に保持されます。