在javascript代码中保留敏感信息的安全缺陷

在javascript代码中保留敏感信息的安全缺陷,javascript,security,local-storage,bundler,Javascript,Security,Local Storage,Bundler,每个人都知道,在js代码中不应该保留sensitiveInfo变量。更好的方法是将其放在本地存储中。你能用我的例子解释第一种方法的漏洞吗 示例: 您使用bundler,它将所有js文件捆绑在一起sensitiveInfo不是全局的,而是存储在YourStorage.js中。要访问保存该文件的文件,请执行以下操作: import YourStorage from 'somepath/YourStorage'; YourStorage.sensitiveInfo = newValue; // QUE

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

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

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

  • sensitiveInfo
    变量是否可从控制台访问
  • 你能描述一下有人是如何盗取敏感信息的吗
  • 如果有人可以从我的代码中窃取,为什么他不能从本地存储中窃取呢


  • 更新:(我想保护谁?)。我想保护他们免受各种各样的攻击,他们可以在这些攻击中挣钱(即本地安装的病毒)

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

    首先,使用SSL通过“线路”加密信息

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

    通常,您编写应用程序时需要验证用户和设备的身份。验证之后,您将使用仅存储在应用程序服务器端且仅可从应用程序服务器端获得的密钥对令牌进行解密


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

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

    首先,使用SSL通过“线路”加密信息

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

    通常,您编写应用程序时需要验证用户和设备的身份。验证之后,您将使用仅存储在应用程序服务器端且仅可从应用程序服务器端获得的密钥对令牌进行解密


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

    您想保护谁?您可以从本地存储中获取任何信息。它只是纯文本,非常容易访问。您可能根本不应该在本地存储中存储敏感数据。@JosephMarikle在哪里存储autologin的authToken?@deceze试图保护所有坏人)对不起,您是说某些特定类型的Atack吗?Token是不同的。令牌是远程会话的浏览器端。令牌本身是一个毫无意义的散列,因此在本地存储它是安全的。敏感信息随后将存储在远程服务器上的会话中。您试图保护谁?您可以从本地存储中获取任何信息。它只是纯文本,非常容易访问。您可能根本不应该在本地存储中存储敏感数据。@JosephMarikle在哪里存储autologin的authToken?@deceze试图保护所有坏人)对不起,您是说某些特定类型的Atack吗?Token是不同的。令牌是远程会话的浏览器端。令牌本身是一个毫无意义的散列,因此在本地存储它是安全的。敏感信息将被存储在远程服务器上的会话中。比我在评论中的微弱尝试更好、更简洁的解释。出于我自己的好奇,您如何确保用户和设备的身份?大多数设备信息很容易被欺骗(MAC地址,IP)。你必须相信它发送给你的信息是准确的,对吗?那么,询问设备的身份真的有意义吗?根据设备是什么,有多种方法。通常情况下,智能手机和平板电脑等产品都有唯一的密钥(如序列号),可以在帐户设置期间使用这些密钥来表示“该用户在该设备上”。IP和MAC已经很少使用了,当用户连接到不同的网络时,IP很容易改变,MAC号码也很容易被伪造。如果这样的唯一密钥不可用,通常在用户设置帐户并存储(以加密形式)在设备上时提供。@Blackthorn感谢您的回答!您能解释一下在您的方案中如何使用token自动登录吗?你说我应该首先识别用户,然后解密令牌。但是我如何在没有令牌的情况下识别用户呢?自动登录通常需要用户登录一次。在这一次成功登录之后,将向用户设备颁发一个唯一的、通常是一次性的证书。然后在将来登录时提供此证书以进行身份验证,并且