每页本地存储?
Posted
技术标签:
【中文标题】每页本地存储?【英文标题】:Per-page localStorage? 【发布时间】:2016-12-01 05:02:18 【问题描述】:在 html5 中,是否可以创建一个只能由单个网页访问的本地存储?
我目前正在尝试编写独立的单页应用程序的可能性,以及用户是否可以自己托管它们,例如在他们的 Dropbox 上(它具有一些用于公共文件的基本网络托管功能)或通过在 localhost
上运行最小的网络服务器。
然后,用户可以从其本地服务器/Dropbox 中的各种来源启动此类 HTML 应用程序,或者被要求从其他用户 Dropbox 打开一个。
由于所有这些页面都来自同一个来源(当前为https://dl.dropboxusercontent.com
),它们都将共享一个localStorage
,如果名称冲突,这可能会干扰功能并泄漏数据;例如。这样的页面可能希望将用于访问用户 Dropbox 帐户的身份验证令牌存储在 localStorage
中,但随后任何其他此类“应用程序”都可以窃取该令牌。
我必须在这里说,我是 HTML5 新手,很可能在这里扩展了预期的使用范围,因为由于同源策略等基本网络安全概念,我一直遇到限制——尤其是在打开时通过 file:// uri 从本地驱动器获取 HTML 文件。
核心意图是允许用户通过使用现有的网络服务订阅来托管和数据同步,而不是将他们的数据移动到另一个服务,从而以一种适用于其移动和桌面设备的方式托管他们自己的自定义应用程序。
【问题讨论】:
如果可能的话,您可以使用对 URI 敏感的 cookie 而不是 localStorage。如果没有,你可以尝试加密localStorage数据,解密的私钥会按路径存放在cookies中。 【参考方案1】:如here 所述,localStorage 的范围是协议、域和端口,仅此而已。
这样,即使通过唯一的页面令牌(即localStorage.set('page1.' + key)
)为每个 localStorage 键添加前缀,也无法避免其他页面获取这些信息,因此没有简单的方法可以避免信息泄漏。
【讨论】:
【参考方案2】:您可以使用唯一的页面标识符(甚至是 url)作为加密存储数据的密钥。理论上。
【讨论】:
嗯,是的,像 ZeroBin 这样的 URL 中的哈希值 理论上的同源恶意应用程序不能读取吗?以上是关于每页本地存储?的主要内容,如果未能解决你的问题,请参考以下文章