【问题标题】:Control what domain the browser associates with a remembered password控制浏览器将哪个域与记住的密码相关联
【发布时间】:2013-06-05 16:26:56
【问题描述】:

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

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

带有“记住密码”、“现在不”和“从不用于此站点”选项。

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

当用户在someclient.com 上登录我们的插件时,我希望他们的浏览器提示他们记住mysite.com 上的密码,当他们在someotherclient.com 上看到我们的登录表单时,我希望它自动完成他们在someclient.com 上输入的用户名和密码相同。但是,目前,他们会收到提示询问

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

相反,这不是我想要的。

我想要的是否可能,如果可能,如何实现?

【问题讨论】:

  • 我看到的唯一(丑陋)解决方案是将登录表单放在 iframe 中,而不是使用 javascript 加载它...

标签: html forms passwords cross-domain


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-10-05
    • 2011-02-04
    • 2012-05-30
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多