【问题标题】:Cache password in JavaScript for later use, securely安全地在 JavaScript 中缓存密码以供以后使用
【发布时间】:2013-09-09 10:49:12
【问题描述】:

我们目前正在开发一个网络应用程序,该应用程序需要使用用户密码解密存储在服务器上的数据。主要目标是不再向用户询问他的密码,因此想法是,登录后,将密码存储在全局 JavaScript 变量中,以便稍后在下载和解密文件时访问它。不知何故,我不喜欢保留密码的想法,但从营销的角度来看,更高的优先级是方便。

我只是偏执,还是可能存在安全问题?如果这可能是一个安全问题,我怎样才能以一种不干扰便利因素的安全方式实现它?

编辑

上传时数据在客户端加密,下载后在客户端解密。用户的密码存储在使用 SHA-256 散列的服务器上。

【问题讨论】:

  • 您想离线使用密码吗?
  • 永远不要在 JavaScript、cookie 或本地存储中存储密码。
  • 存储使用密码生成的令牌可能会更好。你用什么做服务器?
  • 在我们讨论这个主题时可能会有所启发:torrentfreak.com/…。基本上 Mega 如何将用户主密钥存储在 localStorage 中。
  • 不要将其存储在 javascript 中。如果可以利用您网站中的 XSS 漏洞,则可以将密码发送给攻击者。

标签: javascript security encryption passwords


【解决方案1】:

您是否考虑过使用 Session 变量?它们更加安全。

如果您需要坚持使用客户端 JavaScript,我认为您可以将它们存储在 cookie 中。

但是,我不确定您真正想要为您的应用实现什么。

【讨论】:

  • cookies 具有与简单的 javascript 变量相同的安全级别。对于用户或可能成功进行 XSS 攻击的黑客来说,阅读它们真的很容易。
  • 没错,cookie 并不安全,我从未说过它们是安全的。但是您不应该首先将密码存储在任何地方。评论前请仔细阅读答案。
【解决方案2】:

您是否考虑过通过模块模式创建一个对象来处理对密码具有私有访问权限的解密?

http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

【讨论】:

  • 它不保护这个过程。这只会帮助开发人员减少变量的可访问性。
  • 当您说“不易访问”时,您是说该变量仍然可以通过闭包中声明的代码以外的代码获得吗?如果是这样,并且为了我个人的致富,我想知道如何?
  • 在 javascript 中,每个变量都是全局的。我不知道你的库是如何工作的,但你可以确定它包含的数据可以用其他名称访问。
  • 打开开发者工具,你可以看到和访问你的客户端代码中的任何东西。
  • 真的很简单。您永远不应该在客户端存储敏感数据,因为任何人都可以轻松访问它。如果你有一个可以解密这个密码的闭包,任何人只要打开他们的开发者工具并设置一个断点就可以看到密码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 2013-12-25
  • 1970-01-01
  • 2016-08-23
  • 2014-08-29
  • 1970-01-01
  • 2019-01-19
相关资源
最近更新 更多