使用localStorage存储数据有多安全?

时间:2013-08-09 10:13:45

标签: cordova security local-storage

我的应用需要登录,并且我有Remember username and password能力。然后用

存储用户名和密码
  

localStorage.setItem('username',username);

这种存储用户名和密码的方式有多安全?我特别在Android上担心的是,如果其他应用程序可以访问数据并且可以获取登录信息。

该应用适用于iOs和Android,我正在使用PhoneGap 2.9

4 个答案:

答案 0 :(得分:17)

LocalStorage在正常情况下只能由您的应用访问。它与特定平台(iOS,Android)上的沙箱一样安全,可以保护您的应用程序的数据不被其他应用程序读取。

有时,沙箱不像您预期​​的那样强大,例如:在这些情况下:

  • 设备已植根或越狱
  • 制造商未能提供安全更新或用户未更新
  • 攻击者可以物理访问设备,例如,如果它被盗。

如果攻击者可以访问明文密码和用户名,他们也可以尝试使用其他帐户(而不仅仅是您的服务)。因此,如果您的应用的用户对多个服务使用相同的密码,攻击者也可以访问它们。

如何存储密码哈希?

对于服务器端应用程序,这是一个好主意,因为它们在受保护的环境中运行(具有访问控制的数据中心,系统工程师负责安全更新)。

另一方面,手机很容易被盗,用户通常不会或无法安装安全更新。

如果散列没有加密,如果你得到哈希,很容易使用彩虹表获取明文密码。如果哈希被腌制,那么很容易获得简单密码的明文密码。此外,生成不安全的密码哈希非常容易。

解决方案:存储随机生成的访问令牌:无论密码多么简单或复杂,只需不可能通过查看令牌获取明文密码。

<强> TL; DR

如果您使用凭据对某种API服务进行身份验证,则应在本地存储密码和用户名,即使是在iOS密钥链等安全存储中也是如此。

您应该做的只是存储从该API获得的随机生成的令牌不是密码哈希!)(类似于存储会话的概念) Cookie中的ID而不是用户/密码组合。一种可能性是使用OAuth。

这样您就可以确保真正的凭据永远不会被泄露,即使沙箱无法保护数据或手机被盗也是如此。

答案 1 :(得分:4)

每个应用程序在PhoneGap中使用它自己的webview,localStorage只能在该webview中访问。

编辑:我仍然会考虑哈希密码。

答案 2 :(得分:0)

在localStorage中保存密码不是一种安全的方法。如果您正在使用PhoneGap,请尝试保存用户名&amp; iOS Keychain中的密码。看看这个插件: https://github.com/shazron/KeychainPlugin

答案 3 :(得分:0)

每个不同的cordova应用程序,就像不同的网络浏览器,只能访问它们自己设置的数据或localStorage数据,因此不同的应用程序无法访问您自己的应用程序设置的localStorage中的数据.同时,如果您想对用户进行身份验证,请考虑为此使用 jwt 访问令牌,而不是在设备上存储实际的原始用户名或密码。