【问题标题】:Mobile App Development - HTML5 LocalStorage versus SessionStorage versus Cookies移动应用程序开发 - HTML5 LocalStorage vs SessionStorage vs Cookies
【发布时间】:2011-08-17 07:01:44
【问题描述】:

我们正在 jQuery Mobile 平台上开发一个移动 Web 应用程序,该应用程序要求用户提供他们的用户名和密码。

而不是每次都要求用户重新输入他们的详细信息,我们只想询问他们一次用户名和密码,然后提示他们输入密码。

我们将加密此 pin 并加密用户标识符字符串并将两者保存在 LocalStorage 或 Cookie 中。

当用户第二次访问应用程序时,我们将测试是否可以找到用户标识符,如果可以,则提示他们输入 pin。

输入 pin 后,我们将安全 (SSL) 传递 pin 和用户标识符,以便在服务器上解密和验证。

我在一些地方读到我们应该使用 Cookies 而不是 LocalStorage(从安全的角度来看)。您同意这一点吗?大多数智能手机都可以使用 cookie 吗?

我们还需要确保用户每次关闭浏览器或浏览到另一个页面或超过 30 分钟不活动时都需要重新输入他们的密码。

为了解决这个问题,我正在考虑在 SessionStorage 中存储一个值,因为我读到这比 LocalStorage 更安全,并且会在浏览器关闭时过期。或者,我们可以再次使用 Cookie。

安全是一个关键问题,所以我很想听听您可能有的任何提示和/或替代方法。

在此先感谢...

【问题讨论】:

  • 我阅读了您选择的答案中的对话。即使散列存储 PIN 与存储密码一样“糟糕”,因为它们可以被取消散列 - 但我了解您来自哪里:但是,即使您只将 PIN 发送到服务器,也会出现同样的问题。标准做法是在服务器端将盐添加到已接收到的任何散列中,对其进行散列,然后存储结果。稍后在每次后续登录时,将接收到的哈希与您存储的内容进行比较,并使用偏移量允许哈希盐的长度,当然只有您知道。从而避免任何直接存储。
  • 你如何解散它?

标签: web-applications mobile security jquery-mobile


【解决方案1】:

如果安全是您最关心的问题,我不建议您使用 cookie,因为它们会随每个请求一起发送到服务器,任何通过网络嗅探该流量的人都可能会拦截它们。在性能方面,使用 cookie 还会增加服务器和客户端之间来回传输的数据量。

出于您的目的,如果您希望您的数据仅在浏览器会话的生命周期内保持不变,我会选择sessionStorage,包括您可以测试会话到期的时间戳。 sessionStoragelocalStorage 中的数据只保留在客户端,从不发送到服务器。

【讨论】:

  • 感谢您的回复,您认为在 LocalStorage 上存储 pin 和用户标识符(均已加密)是否可以接受?
  • 如果您在服务器上解密和验证 pin,并且他们在浏览到另一个页面时必须重新输入 pin,那么最好在 sessionStorage 中存储一个时间戳,这将只能在该页面上进行检查。时间戳将有一个滑动到期,这意味着如果它尚未达到 30 分钟到期,它将被更新到新的当前时间。
  • 用户 ID 可以存储在 localStorage 中,只要它不包含任何 PII(个人身份信息),即使它是加密的,但我个人永远不会存储密码/密码/密码短语,无论是否加密,在服务器之外的任何地方,甚至在服务器上,我都不会以明文甚至任何可解密的形式存储它,而是使用单向算法将 pin 转换为哈希,最好使用 salt ,并且每当用户输入他们的密码时,将其转换为哈希并将其与存储在服务器上的哈希进行比较。
  • 谢谢,这是很好的建议。因此,我们将在 LocalStorage 中存储非个人身份的哈希并将 PIN 存储在服务器上。当用户输入 pin 时,我们会将其与 LocalStorage 中的哈希一起发送并确保两者都验证
  • 我认为 sessionStorage 适用于整个域而不是单个网页?因此,只有当用户浏览到另一个域时,才会要求他们输入 pin(在返回应用程序时)。感谢大家的帮助
猜你喜欢
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多