奇怪的自动完成 + 密码记忆行为

Odd Autocomplete + Password Remembering Behaviour

提问人:Samuel 提问时间:1/20/2009 更新时间:8/29/2010 访问量:1712

问:

我很难弄清楚 Firefox 和 Chrome 如何确定哪些字段是密码,以及它们如何在其他表单上自动完成它们。

对于我的登录表单,我有这个:

<p>
    <label for="login_email">Email:</label><br />
    <input id="login_email" name="login[email]" size="30" type="text">
</p>

<p>
    <label for="login_password">Password:</label><br />
    <input id="login_password" name="login[password]" size="30" type="password">
    <input id="login_password_hash" name="login[password_hash]" type="hidden">
</p>

<p>
    <input id="login_submit" value="LOGIN" type="submit">
</p>

该字段用于在使用 Javascript 发送之前在客户端对密码进行哈希处理,禁用 Javascript 不会更改结果。login_password_hash

为了创建一个新用户,我有这个表格:

<p>
    <label for="user_email">Email:</label>
    <input id="user_email" name="user[email]" size="30" type="text">
</p>
<p>
    <label for="user_first_name">First Name:</label>
    <input id="user_first_name" name="user[first_name]" size="30" type="text">

</p>
<p>
    <label for="user_last_name">Last Name:</label>
    <input id="user_last_name" name="user[last_name]" size="30" type="text">
</p>
<p>
    <label for="user_password">Password:</label>
    <input id="user_password" name="user[password]" size="30" type="password">
    <input id="user_password_hash" name="user[password_hash]" type="hidden">
</p>

<p><input id="user_submit" value="Create User" type="submit"></p>

现在,在从登录表单中保存密码并访问新用户表单后,保存的电子邮件将放在密码字段之前的最后一个字段中,并将密码放在密码字段中。

这发生在 Firefox 和 Chrome 上,但不会发生在 Internet Explorer 中。关于为什么 Firefox 和 Chrome 会以这种方式运行的任何想法?这两种形式没有任何共同之处,名称和 ID 都不同。

Ruby-on-Rails Firefox 自动完成 Google-Chrome

评论

0赞 Joe Phillips 1/20/2009
为什么要对密码进行哈希处理,然后发送明文密码?
0赞 Samuel 1/20/2009
它没有,密码字段在发送前被清空。服务器检查password_hash,如果它为空,则会对纯文本进行哈希处理,因为未启用 Javascript。
0赞 Kibbee 1/20/2009
但为什么要有这个领域。通过允许客户端提交预先哈希的版本,您可以降低安全性。如果有人掌握了您的数据库,他们只需提交从数据库获取的已哈希密码即可。
0赞 Samuel 1/20/2009
这是一个很好的观点,我应该再说一遍。或者我不应该那么担心以纯文本形式传输密码?
0赞 Ceiling Gecko 1/15/2014
将提交转发给 javascript: Step1 用户访问您的登录页面并收到一个随机生成的字符串,该字符串保存在会话变量中。步骤2用户在用户名和密码字段中输入他的凭据,并通过按下登录按钮触发 javascript 函数。步骤3Javascript 对密码进行哈希处理,在会话变量中获取字符串 (salt),将其添加到哈希密码中,然后再次进行哈希处理。步骤4Javascript 将用户名和哈希加盐密码发送到您的服务器。

答:

0赞 TravisO 1/20/2009 #1

好吧,所有浏览器都将选择最明显的字段名称:

  • 名字
  • 姓氏
  • 用户名
  • 密码

以及这些明显的替代词(空格的下划线,以及一些简写,例如“用户”和“通过”)。这将取决于浏览器本身以及它的哪个版本以及支持哪些疯狂的替代项。

评论

0赞 Samuel 1/20/2009
将电子邮件和密码字段的 id 和 name 属性都更改为完全乱码,Firefox 和 Chrome 仍然会自动完成这两个表单。
2赞 D'Arcy Rittich 1/20/2009 #2

如果要在输入上禁用自动完成功能,请尝试使用自动完成属性,例如:

<input type="text" name="email" autocomplete="off" />

但是,这并不能保证在所有浏览器中都有效。

评论

0赞 Samuel 1/20/2009
我想要登录页面的自动完成,但感谢您的建议。
0赞 Samuel 1/20/2009 #3

似乎更改 name 和 id 属性对 Firefox 和 Chrome 中的密码管理器没有影响,他们看到的只是一个password_field和它上面的字段,这对他们来说已经足够了。

所以我只是将创建新用户中的密码字段作为文本字段。

评论

0赞 kripto_ash 7/16/2010
这似乎是一个已知问题。code.google.com/p/chromium/issues/detail?id=1854