2011-05-02 34 views
7

我们正在jQuery Mobile平台上开发移动Web应用程序,要求用户提供其用户名和密码。移动应用程序开发--HTML5 LocalStorage与SessionStorage与Cookies的比较

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

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

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

一旦输入密码,我们将安全地(SSL)传递密码和用户标识以在服务器上解密和验证。

我读过几个地方,我们应该使用Cookie而不是LocalStorage(从安全的角度来看)。你是否同意这一点,可以在大多数智能手机上使用Cookie?

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

为了管理这个,我正在考虑在SessionStorage中存储一个值,因为我已经知道这比LocalStorage更安全,并且在浏览器关闭时会过期。或者我们可以再次使用Cookies。

安全性是一个关键的问题,所以我会有兴趣听到任何提示和/或可能的替代方法。

提前感谢...

+1

我在所选答案中阅读了对话。即使散列存储密码与存储密码一样存储密码,因为它们可以取消散列 - 但我明白你来自哪里:但即使只将引脚发送到服务器也会出现同样的问题。标准做法是在服务器端添加salt到已接收到的任何散列,然后散列并存储结果。稍后在随后的每次登录中,将接收到的散列值与您存储的偏移量进行比较,以确定散列盐的长度,当然这只是您知道的。从而避免任何直接存储。 – T9b 2011-05-10 15:52:47

+0

你如何解决它? – 2015-01-06 23:23:39

回答

6

如果安全是你的首要关注,我不建议使用cookie,因为它们与每个请求的服务器,它可能会被任何人嗅探流量在被截获发送网络。在性能方面,使用cookie也会增加服务器和客户端之间来回传输的数据量。

为了您的目的,我会选择sessionStorage如果您希望您的数据仅在浏览器会话的整个生命周期内持久化,包括您可以测试会话过期的时间戳。 sessionStoragelocalStorage中的数据仅保留在客户端上,不会发送到服务器。

+0

感谢您的回应,您认为在LocalStorage上存储引脚和用户标识符(都是加密的)是可以接受的吗? – user445069 2011-05-02 22:13:00

+0

如果您要解密并验证服务器上的引脚,并且他们必须重新进入引脚(如果他们浏览到另一个页面),那么最好是将时间戳存储在只会在该页面上进行检查的'sessionStorage'中。时间戳会有滑动到期,这意味着如果尚未达到30分钟到期,它将被更新为新的当前时间。 – Ryan 2011-05-02 22:38:04

+0

只要它不包含任何PII(个人识别信息),即使它已经加密,用户ID也可以存储在'localStorage'中,但我个人从不会在任何地方存储密码或密码在服务器之外,甚至在服务器上,我也不会以明文形式或以任何可解密的形式存储它,而是使用单向算法将引脚转换为散列,最好使用salt,并且只要用户输入它们引脚,将其转换为散列并将其与服务器上存储的散列进行比较。 – Ryan 2011-05-02 22:43:10

相关问题