HTTP缓存
如果您的网页应用处理任何可识别个人身份的消费者信息或任何其他敏感信息,请务必考虑浏览器缓存的影响。
一般最佳实践
每当信息从服务器发送到浏览器时,默认行为是缓存响应以加快未来访问速度。速度固然重要,但安全性更重要。缓存的信息可以由浏览器在设备上持久存储,使其在设备受到攻击时容易泄露;恶意应用可能会访问缓存的数据。
大多数情况下,浏览器可以安全地缓存像静态图形这样的资产。作为最佳实践,您不应缓存登录后受保护的任何信息。这可能会导致信息无意中提供给恶意应用。
为了确保浏览器(本机浏览器或WebView)不会持久存储来自Web服务器的响应,请将以下标头添加到所返回的HTTP响应中。
Cache-Control: no-cache
或
Cache-Control: no-store
有关更多信息,请参阅HTTP规范第14.9节。
为了向后兼容,还应该包含一个no cache特殊指令。
Pragma: no-cache
有关更多信息,请参阅HTTP规范的第14.32节。
将这些标头包含在响应中的说明应该位于Web服务器文档或用于对应用编码的编程框架中。
Cookie和安全性
如果您使用SSL来保护您和用户之间通信的安全性,还必须确保您存储的Cookie不会通过意外的方式使用。例如,如果您在Cookie中保存登录令牌,则应将该Cookie标记为安全。同样,如果服务器发送的Cookie不应该被页面上运行的JavaScript访问,它应该被标记为HttpOnly,以防止某些类别的跨站点脚本攻击。(注意: HttpOnly Cookie是HTML5规范的一部分。)
有关安全Cookie的更多信息,请访问用于状态管理的HTTP规范。
HttpOnly Cookie是HTML5规范中正在进行的工作。
亚马逊网页应用缓存API
如果您的网页应用由亚马逊分发,您可以使用可用的API清除嵌入式浏览器的缓存。例如,当用户退出您的应用时,您可以强制从设备中清除任何保存的数据。虽然这不能取代从一开始就不缓存关键信息,但它可以成为一种有用的方法,以确保您尽一切可能保护客户的数据,从而维护客户的信任。
亚马逊网页应用缓存对象
在调用任何亚马逊网页应用缓存API之前,请务必检查该对象是否存在。这可以确保当您的应用在没有包装器的情况下运行时功能正常。
document.addEventListener("amazonPlatformReady", function() {
if (amzn_wa.Cache != null) {
// 下面记录了调用API
}
});
对亚马逊网页应用缓存对象的任何调用都只会影响封装的应用。其他网页应用和本机浏览器将不受影响。
亚马逊网页应用缓存方法如下:
amzn_wa.Cache.clearAppCache()
- 清除资源缓存。amzn_wa.Cache.clearFormData()
- 清除保存的任何Web窗体数据。amzn_wa.Cache.clearHistory()
- 告诉嵌入式浏览器清除其内部后退/前进列表。amzn_wa.Cache.clearAllCookies()
- 清除嵌入式浏览器中的所有Cookie。amzn_wa.Cache.clearExpiredCookies()
- 强制从嵌入式浏览器中删除过期Cookie。(这些Cookie不会根据请求发送到服务器,但可以保留在设备上,直到垃圾回收将其删除)。amzn_wa.Cache.clearSessionCookies()
- 从嵌入式浏览器中清除所有会话Cookie。如果在最初创建Cookie时没有使用过期日期,则会存在会话Cookie。