【问题标题】:What are the security considerations for a javascript password generator?javascript 密码生成器的安全注意事项是什么?
【发布时间】:2010-11-24 01:01:10
【问题描述】:

很长一段时间以来,我一直在考虑使用 Javascript 小书签为我访问的不同网站生成密码,以避免“到处都有类似密码”的问题,但仍然是可移植的。然而,在阅读this paper 之后,我清楚地意识到使用这种方法意味着单个恶意页面可能会危及我的整个安全。

现在我正在考虑以下解决方案:一个书签,它只会做一件事:在附加原始 URL 的新页面中打开一个 URL(例如 http://example.com/password_man.html?url=slashdot.org)。位于 example.com 页面上的脚本将执行实际的密码生成。

有人发现这种方法有任何安全问题吗?虽然它不如原来的方便,但据我所知,即使是恶意页面也只能看到它获得的密码,并且无法访问主密码等敏感信息。我的假设是否正确?

更多说明:

  • 密码的生成将完全在客户端完成。上面示例中提到的“password_man.html”将包含类似于书签中已包含的 JavaScript 代码,它将包含一个输入字段供您指定主密码
  • “url”参数的解释也将在客户端完成。我正在考虑将此文件作为我的 google 代码帐户的特定修订版(即 password_man.html 的 v1234)托管,这样可以保证我不会更改用户下方的页面
  • 此外,HTTP/HTTPS 也不是问题,因为所有处理都由客户端浏览器完成,不会将数据发送回服务器。您可能争辩说 MITM 攻击可能会修改页面,以便在您使用明文协议(如 HTTP),但如果您已经有 MITM 情况,还有其他更容易进行的攻击途径(例如:从提交密码的请求中窥探密码,或窥探会话 ID 等)

更新:在搜索并考虑问题后,我得出结论,无法在同一页面内安全地完成此操作。即使小书签只捕获域并打开一个新窗口(通过 window.open),恶意站点也总是可以覆盖 window.open,这样它就会打开一个实际捕获主密码的页面副本(本质上执行网络钓鱼攻击)。

【问题讨论】:

    标签: javascript security passwords


    【解决方案1】:

    supergenpass 听起来和你打算做的很相似。

    如果实现为小书签的要求是可移植性,则存在现有的多平台密码管理器。比如我用的是Lastpass,它支持所有主流浏览器,也可以在Opera Mini上运行,还有书签形式。

    【讨论】:

      【解决方案2】:

      您可能还希望与 url 一起传递密码短语,这样就必须知道两件事才能重新生成密码。

      如果您只传入 url 并且总是使用相同的密码,那么只有一个人可以使用此应用程序。

      两个人使用相同密码的可能性不大,您可以为每个网站使用相同的密码。

      如果您使用 https 连接,那么它不会被窥探更安全。

      我相信您的方法存在一些可用性问题,如果您使用 http 连接,那么您也容易受到窥探。有人可以通过知道 url 来获取密码这一事实意味着这比在每个站点上使用相同的密码更容易受到攻击,IMO。

      更新: 由于澄清,我的答案发生了变化。

      基本上,在 javascript 中,您可以拥有私有成员,这样其他代码就无法看到这些值,除非使用了诸如 firebug 之类的东西,但用户就是查看者。

      此链接将有助于对此进行更多解释: http://www.crockford.com/javascript/private.html

      如果您将主密码和所有相关信息放入此处,并生成密码,那么其他 javascript 代码将无法获取该信息,因为您将创建没有 getter 的 setter。

      这应该能让您拥有一个安全的密码生成页面。

      【讨论】:

      • 感谢您的快速回复。我添加了一些更多的说明,希望能解决您提出的问题。首先,生成的密码取决于三件事:您的用户名、您的主密码和站点域,其中两个您必须输入(用户名和主密码)。其次,所有的处理都是在客户端完成的,所以 MITM 攻击者只能观察到正在下载的脚本,而不是来回传输的数据。请求中附加的 URL 仅供本地 javascript 用于为您填写其中一个字段。
      【解决方案3】:

      如果您不介意以 Firefox 为中心的解决方案,请查看Password Hasher。有“portable page”选项,可以让你生成一个可以与其他浏览器一起使用的页面,但我只用 Chrome 尝试过

      如果您想为其他浏览器调整它的源代码,请访问here

      【讨论】:

        【解决方案4】:

        Javascripts PRNGs 通常在密码学上不强:https://bugzilla.mozilla.org/attachment.cgi?id=349768;所以如果你用来生成密码,其他网站可能会猜到生成的密码,甚至影响选择的密码。

        【讨论】:

          猜你喜欢
          • 2011-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-06
          • 2014-08-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多