为了账号安全,请及时绑定邮箱和手机立即绑定

浏览器如何知道何时提示用户保存密码?

/ 猿问

浏览器如何知道何时提示用户保存密码?

慕标琳琳 2019-11-13 16:07:03

这与我在这里提出的问题有关: 如何让浏览器提示您保存密码?


这是问题所在:我无法使浏览器提示我保存我正在开发的网站的密码。(我说的是,当您在Firefox上提交表单时,有时会显示的栏,上面写着“还记得yoursite.com的密码吗?是/否现在/从不”)


这真令人沮丧,因为Firefox(和大多数其他现代浏览器,我希望以类似的方式工作)的这一功能似乎是个谜。这就像浏览器的魔术一样,在浏览器中查看您的代码,您提交的内容或其他内容,如果它“看上去”像是带有用户名(或电子邮件地址)字段和密码字段的登录表单,则它可以保存。


除非在这种情况下,否则在我的用户使用我的登录表单后,它没有为我的用户提供该选项,这使我发疯。:-)


(我检查了Firefox的设置-我没有告诉浏览器“从不”访问该站点。它应该在提示。)


我的问题

Firefox用来了解何时提示用户进行保存的启发式操作是什么?这应该不太难回答,因为它就在Mozilla源码中(我不知道在哪里看,否则我会尝试自己挖掘出来)。我也没有运气从Mozilla开发人员那里找到博客帖子或其他类似的开发人员说明。


(我可以在Safari或IE中回答这个问题,这很好;我可以想象所有浏览器的用户使用的规则都非常相似,因此,如果我能在其中一个浏览器中使用它,那么它将在其他浏览器中使用。)


(*请注意,如果您的回答与Cookie,加密或其他与我在本地数据库中存储密码的方式有关,则很可能您误解了我的问题。:-)


查看完整描述

3 回答

?
万千封印

基于我的阅读,我认为Firefox通过form.elements[n].type == "password"(遍历所有表单元素)检测密码,然后通过在表单元素中向后搜索紧接密码字段之前的文本字段来检测用户名字段(此处提供更多信息)。您可以尝试使用Javascript进行类似操作,看看是否可以检测到密码字段。


据我所知,您的登录表单必须是的一部分,<form>否则Firefox将无法检测到它。id="password"在您的密码字段上进行设置也可能不会受到伤害。


如果这仍然给您带来很多问题,我建议您向Mozilla项目的开发者邮件列表之一询问(您甚至可能会从设计该功能的开发者那里得到答复)。


查看完整回答
反对 回复 2019-11-13
?
POPMUISE

我遇到了同样的问题,找到了解决方案:


为了使浏览器要求存储密码,用户名和密码框必须采用表格形式,并且该表格必须实际提交。提交按钮可能会从onclick处理程序返回false(因此实际上不会发生提交)。


为了使浏览器恢复先前存储的密码,输入框必须存在于主HTML表单中,并且不能通过javascript动态创建。可以使用display:none创建表单。


需要注意的是,密码是在页面加载后立即填写的,并且在整个会话期间都存在,因此可以通过注入的javascript读取:这样会使攻击更加严重。为了避免这种情况,转发到单独的页面以进行登录是合理的,它解决了您开始阅读本主题所涉及的所有问题:)。作为部分解决方案,我在提交表单时清除了这些字段-如果用户注销并想再次登录,则浏览器不会填充密码,但这对我来说是次要的。

查看完整回答
反对 回复 2019-11-13
?
慕姐4208626

您应该查看Mozilla密码管理器调试页面和扩展作者的nsILoginManager文档(仅适用于Firefox如何处理密码管理的具体技术细节)。您可以在此处找到答案以及在其上链接的其他页面,以发现比您想知道的更多信息,密码管理器如何与站点和扩展进行交互。


(特别是如密码管理器调试文档中所指出的那样,请确保您没有在html中将自动完成功能设置为关闭,因为这将禁止提示保存用户名和密码)


查看完整回答
反对 回复 2019-11-13

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信