【问题标题】:Odd Autocomplete + Password Remembering Behaviour奇怪的自动完成 + 密码记住行为
【发布时间】:2010-08-29 08:41:14
【问题描述】:

我很难弄清楚 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>

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

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

<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都不一样。

【问题讨论】:

  • 为什么要散列密码然后发送明文密码?
  • 没有,密码字段在发送前清空。服务器检查password_hash,如果它为空,将散列纯文本,因为没有启用Javascript。
  • 但是为什么有这个领域。通过允许客户端提交预先散列的版本,您正在降低安全性。如果有人掌握了您的数据库,他们可以简单地提交他们从数据库中获得的已经散列的密码。
  • 这是一个好点,我应该再哈希一下。还是我不应该担心以纯文本形式传输密码?
  • 将提交转发到 javascript:Step1 用户访问您的登录页面并收到一个随机生成的字符串,该字符串保存在会话变量中。 Step2 用户在用户名和密码字段中输入他的凭据,并通过按下登录按钮触发 javascript 功能。 Step3 Javascript 对密码进行哈希处理,获取会话变量中的字符串(salt),将其添加到哈希密码并再次对其进行哈希处理。 Step4 Javascript 将用户名和散列加盐密码发送到您的服务器。

标签: ruby-on-rails firefox autocomplete google-chrome


【解决方案1】:

如果您想禁用输入的自动完成功能,请尝试使用自动完成属性,例如:

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

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

【讨论】:

  • 我希望登录页面自动完成,但感谢您的建议。
【解决方案2】:

所有浏览器都会选择最明显的字段名称:

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

还有那些明显的替代品(空格下划线,可能还有一些简写,例如“user”和“pass”)。这将取决于浏览器本身以及它的版本以及支持哪些疯狂的替代品。

【讨论】:

  • 更改电子邮件和密码字段的 id 和 name 属性以完成胡言乱语仍然有 Firefox 和 Chrome 自动完成这两个表单。
【解决方案3】:

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

所以我只是在创建新用户时将密码字段设置为文本字段。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-11-06
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
相关资源
最近更新 更多