在LocalStorage中存储信用卡/银行帐户信息有哪些风险?

时间:2018-04-25 16:42:45

标签: javascript security local-storage

我最近注意到我使用的账单支付网站似乎是在我的浏览器的LocalStorage中存储我的银行账户和信用卡号码。数据存储在JSON对象中,该对象被字符串化为LocalStroage。没有特殊的编码,模糊处理或数据加密。

虽然这最初非常令人反感,而且看起来肯定是一种不合标准的工程实践,但我很难想出这种实施方式可能会受到严重破坏:

  • 由于网站是HTTPS,因此中间人攻击无法注入 恶意JavaScript读出LocalStorage。
  • LocalStorage不是 在HTTP和HTTPS之间的相同域上共享,因此这将是规则 通过非SSL连接注入脚本。
  • 如果网络应用程序无法清理用户提交的内容,可能会注入恶意脚本来窃取LocalStorage中的数据,但它也可能直接从JavaScript的内存中窃取这些数据。因此,使用LocalStorage风险等级也不例外。
  • 恶意浏览器插件可能会从LocalStorage中读取数据,但这与恶意插件可以从网页上抓取数据或从JavaScript内存中读取数据的风险没有什么不同。
  • 如果用户在公共计算机上登录此站点,那么有人可能会从LocalStorage中窃取他们的付款数据。但是如果他们将自己登录到应用程序中,那么从屏幕上窃取数据的人就不会有太大的不同了。我假设LocalStorage在注销时被清除(这可能是一个过于慷慨的假设)。

这种做法会带来哪些其他安全漏洞?

1 个答案:

答案 0 :(得分:2)

  

如果网络应用无法清理用户提交的内容,可能是   可以注入恶意脚本来窃取LocalStorage中的数据,   但它也可以直接从JavaScript的内存中窃取这些数据。   因此,使用LocalStorage风险级别也不例外。

我不同意。如果必须将脚本注入非常特定的网页以便能够访问用户输入的敏感数据,或者如果可以在该主机上的任何页面上注入JavaScript并只是访问LocalStorage并发送,则会产生很大的不同。数据在某处。在后一种情况下,用户在任何时候访问的一个页面足以进行攻击。

此外,您必须考虑到LocalStorage通常由Web浏览器以纯文本格式存储。

IMHO在LocalStorage中存储敏感数据的唯一方法是让服务器使用经过身份验证的密码使用仅由服务器知道的用户特定密钥对其进行加密。如果之后数据应该再次使用,客户端可以将其发送到服务器,服务器可以解密并使用它。当然,永远不应该将敏感部分发送回客户端(例如,作为网页上的预填表格)。