javascript密码生成器有哪些安全注意事项?

时间:2009-08-29 19:15:00

标签: javascript security passwords

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

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

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

更多说明:

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

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

4 个答案:

答案 0 :(得分:2)

supergenpass听起来与你提出的建议非常相似。

如果实现为bookmarklet的要求是可移植性,则存在现有的多平台密码管理器。例如,我正在使用Lastpass,它支持所有主流浏览器,也适用于Opera Mini,也有书签形式。

答案 1 :(得分:0)

您可能还希望传递密码以及网址,这样就有两件事情必须知道才能重新生成密码。

如果您只传入网址并且它始终使用相同的密码,那么只有一个人可以使用此应用程序。

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

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

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

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

基本上,在javascript中你可以拥有私有成员,这样其他代码就看不到这些值,除非使用像firebug这样的东西,但是用户就是那个用户。

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

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

这可以使您拥有安全的密码生成页面。

答案 2 :(得分:0)

如果您不介意以Firefox为中心的解决方案,请查看Password Hasher。有“便携式页面”选项,允许您生成可以与其他浏览器一起使用的页面,但我只使用Chrome浏览器

如果您想将其改编为其他浏览器,则可以使用here来源。

答案 3 :(得分:0)

Javascripts PRNG通常不具有加密功能:https://bugzilla.mozilla.org/attachment.cgi?id=349768;因此,如果您使用生成密码,其他网站可能会猜测生成的密码,甚至影响所选密码。