【问题标题】:Security flaws of keeping sensitive information inside javascript code将敏感信息保存在 javascript 代码中的安全漏洞
【发布时间】:2016-04-08 15:49:06
【问题描述】:

每个人都知道你不应该在你的 js 代码中保留 sensitiveInfo 变量。更好的方法是将其放在本地存储中。您能否借助我的示例解释第一种方法的漏洞?

示例: 您使用捆绑器,它将所有 js 文件捆绑在一起。 sensitiveInfo 不是全局的,而是存储在 YourStorage.js 中。要访问保存它的文件,请执行以下操作:

import YourStorage from 'somepath/YourStorage';
YourStorage.sensitiveInfo = newValue; // QUESTION: can you steal this value? Is it accessible from console?

问题:

  1. 是否可以从控制台访问 sensitiveInfo 变量?
  2. 能否描述一下某人如何窃取sensitiveInfo 的机制?
  3. 如果有人可以从我的代码中窃取它,为什么他不能从本地存储中窃取?

更新:(我想保护谁?)我正在编写移动网络应用程序,用户可以在其中花钱。我想保护他们免受各种可能导致资金损失的攻击(即本地安装的病毒)

【问题讨论】:

  • 谁你试图保护免受?
  • 您可以从本地存储中取回任何内容。它只是纯文本,非常容易访问。您可能根本不应该将敏感数据存储在本地存储中。
  • @JosephMarikle 在哪里存储用于自动登录的 authToken?
  • @deceze 试图保护免受所有坏人的侵害)抱歉,您是指某些特定类型的攻击吗?
  • 令牌不同。令牌是远程会话的浏览器端。令牌本身是一个无意义的哈希,因此在本地存储它是安全的。然后将敏感信息存储在远程服务器上的会话中。

标签: javascript security local-storage bundler


【解决方案1】:

任何放入 javaScript 的可下载内容都可以在用户设备上轻松查看。保护必须来回传递给客户的敏感信息的最常用方法是:

首先,使用 SSL 对“​​线路”上的信息进行加密。

其次,如果数据具有非常敏感的性质 - 例如用于处理信用卡信息的令牌(不要将卡号存储在此令牌中!) - 应使用种子/密钥对数据本身进行加密安全地存储在应用服务器上。

您通常会编写应用程序来要求验证用户的身份和设备。在此验证之后,您将解密令牌 - 使用仅存储在应用程序服务器端且仅可从应用程序服务器端获取的密钥。

使用这种做法,您可以合理地假设用户和设备就是他们所说的那样。当然,此类应用程序本身需要适当的身份验证 - 所述凭据未存储在设备上 - 以防止被盗设备被轻易用于访问应用程序帐户/数据。不要仅仅依靠设备屏幕锁定来确保安全。

【讨论】:

  • 比我在 cmets 中的微弱尝试要好得多、简洁得多的解释。出于我自己的好奇,您如何确保用户和设备身份?大多数设备信息很容易被欺骗(MAC 地址、IP)。你必须相信它发送给你的信息是准确的,对吧?那么,向设备询问其身份真的有意义吗?
  • 根据设备的不同,有多种方法。通常,智能手机和平板电脑等物品都有唯一的密钥(如序列号),可以在帐户设置期间使用这些密钥来表示“此用户在此设备上”。 IP 和 MAC 已经很少使用了,当用户连接到不同的网络时,IP 很容易被更改,并且 MAC 号码很容易被欺骗。如果这样的唯一密钥不可用,通常在用户设置帐户时提供并存储(以加密形式)在设备上。
  • @Blackthorne 感谢您的回答!您能否解释一下如何在您的方案中使用令牌自动登录?您说我应该首先识别用户,然后才能解密令牌。但是我如何在没有令牌的情况下识别用户?
  • 自动登录一般需要用户登录一次。在此单次成功登录之后,将向用户设备颁发唯一的、通常是单次使用的证书。然后在将来的登录中提供此证书以进行身份​​验证,并且通常在使用一次性表单时替换。这是单点登录或联合身份验证的一种形式。
  • 令牌(或证书)是在服务器和客户端之间来回传递的东西 - 通常将 cookie 用于基于 Web 的应用程序。用于加密/解密令牌的种子/密钥集仅存储在服务器上。基本上,令牌对没有种子/密钥的人几乎没有用处。当然,种子/密钥必须安全存储。我发现最好根据需要随机生成部分或全部这些种子/密钥并安全地存储它们(以加密形式)提供最佳安全性。它消除了猜测键的许多问题。
猜你喜欢
  • 2017-05-20
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
  • 2013-01-24
  • 2015-07-05
  • 2012-06-19
  • 2017-09-30
  • 1970-01-01
相关资源
最近更新 更多