繁体   English   中英

使用 localStorage 存储数据的安全性如何?

[英]How secure is storing data with localStorage?

我的应用程序需要登录,并且我有Remember username and password能力。 然后将用户名和密码存储在

localStorage.setItem('用户名', 用户名);

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

该应用程序适用于 iOs 和 Android,我使用的是PhoneGap 2.9

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

有时沙箱并不像你想象的那么强大,例如在这些情况下:

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

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

存储密码哈希怎么样?

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

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

如果散列没有加盐,如果您获得散列,则使用彩虹表很容易获得明文密码。 如果散列被加盐,则很容易获得简单密码的明文密码。 此外,很容易生成不安全的密码哈希。

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

TL; 博士

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

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

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

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

编辑:我仍然会考虑散列密码。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM