坏主意 - 浏览器会记住文本字段,只是不会像使用密码那样自动输入它们。相反,它会建议密码作为自动完成供所有人查看。我还认为从别人的肩膀上读取密码比读取他们的击键要容易得多。
一些浏览器不尊重密码自动完成选项的原因可能是因为密码是由一种单独的(理论上更安全的)方法处理/存储密码数据的——显然,通过使用文本字段,你会绕过这个系统,带来任何风险.
我认为没有不涉及 js 的明确解决方案,因为归根结底,您无法真正控制他们的浏览器所记住的内容。您只能提供提示和建议。这将由不同的浏览器以不同的方式处理。您最好的选择是首先添加:
自动完成=“关闭”
到您的表格和输入。适用于大多数浏览器 - 但不是全部。
以上将进入您的表单标签和密码输入标签,例如:
<form id="form1_randomstring" name="form1" method="post" action="process.php" autocomplete="off">
<input name="password_randomstring" type="password" value="">
正如您在问题中所说,随机化表单和输入名称也会诱使一些浏览器认为它正在处理不同的表单
此外,如果您使用 ssl,浏览器会对它们记住的内容更加保守。所以这可能会有所帮助。
最后,作为另一层保护,您可以使用一点 onload jquery 在 docready 上手动清除表单字段:
$("input[type='password']").val('');
如果不运行js,显然没有帮助。
最终解决方案(也许?)
您可以更进一步,使用 ajax 调用注入表单字段(加上生成随机表单名称 + 自动完成并通过 ssl 提供页面)。这意味着 js 将是登录的要求,但您可以确保该字段清晰并在页面加载后生成表单。我会挑战任何浏览器来完成它。
如果您选择该选项,则外部页面和 ajax 加载页面都必须通过 ssl 运行-如果您不希望这样做,则替代方法可能是通过 iframe 加载 ssl 表单(再次权衡-用户群需要考虑。)
根据您的要求和用户群,这可能是最有保证的选择。
笔记
Autocomplete="off" 可能无法通过严格的 XHTML 验证。然后一个选项可能是在使用 jquery 加载页面后添加 autocomplete 属性(同样,显然这在没有启用 js 的情况下不起作用):
$('#form1').attr('autocomplete', 'off');
另外一点,防止键盘记录器的最简单方法是提供一个选择选项下拉框,并要求他们输入密码中的字母/数字。实际上,您必须将密码限制为字母数字,并要求用户在一系列下拉菜单中从他们的密码中输入至少三个字母/数字。
概括
没有完美的解决方案,但有很多选择,你必须考虑什么是适合你的。我可能会将 ajax 调用作为主要方法。您最初可以加载表单的链接并用 ajax 内容动态替换它,以便非 js 用户仍然可以选择(更少的用户受到自动完成的影响)