控制浏览器与记住的密码关联的域

时间:2013-06-05 16:26:57

标签: html forms passwords cross-domain

当我在Firefox中提交带有密码字段的表单时,浏览器会询问我是否要记住我的用户名和密码。例如,在Firefox中登录gmail,我会在弹出窗口中收到此消息:

  

您想记住google.com上“markamery@gmail.com”的密码吗?

使用'记住密码','不是现在'和'从不为此网站'选项。

我正在开发一个插件,用于在多个网站上提供服务。用户将在我们的mysite.com上拥有一个帐户,我们的客户(例如someclient.com)会在其网页上添加来自mysite.com的Javascript脚本,这会将我们的内容和功能添加到其页面中,包括登录用户可以用来登录我们网站的表单。 (登录过程的实际机制都是用iframe,AJAX和HTML5 postMessage来处理的,而不重要。)

当用户在someclient.com上登录我们的插件时,我希望他们的浏览器提示他们记住mysite.com上的密码,当他们在someotherclient.com上看到我们的登录表单时,我想要它将使用他们在someclient.com上输入的用户名和密码进行自动填充。但是,目前,他们得到了提示

  

您想记住someclient.com上“yourname”的密码吗?

相反,这不是我想要的。

我想要的是什么,如果是的话,怎么样?

1 个答案:

答案 0 :(得分:0)

将表单放在iframe中会导致Firefox至少将任何存储的密码与iframe的域相关联,而不是与主页的域相关联。您可以使用postMessages与iframe通信。

让iframe捕获表单提交事件,序列化表单内容,并通过postMessage将其发送到主窗口;然后主窗口可以从消息中获取表单的内容并使用Javascript处理它。

当然,即使在简单的情况下,这也是一个相当丑陋的黑客攻击,如果iframe中的内容与主页面中的内容或代码之间存在复杂的交互,那么尝试通过postMessage正确处理它们可能会导致快速下降到痛苦和意大利面。如果具有跨域密码自动完成的值很低并且主要问题是具有错误域名的记住密码消息是错误的,那么考虑简单地完全禁用该功能而不是用黑客来破坏你的代码库来修复它。您可以通过将表单的“自动填充”属性设置为“关闭”来禁用它,如下所述:Disable browser 'Save Password' functionality