我研究了它,找不到一种标准的,可靠的方法来使浏览器阻止自动填充,而不记得标准登录表单中的密码。
这对我来说非常重要,因为我正在开发一个移动网络应用,所以如果用户点击退出而其他人拿到手机,浏览器就不应该只是给他们提供密码来帮助他们! / p>
我能想到的唯一解决方案是将密码字段设为=“text”。
当然,这意味着人们可以“肩上冲浪”并看到用户输入的内容,但同一个人几乎可以轻松地只看用户的手指,看看他们输入的密码......
我不认为间谍软件在这里也是一个真正的问题,因为我不认为type =“password”字符掩码会阻止恶意键盘记录器等等。
所以,我想知道在使用type =“text”作为密码字段时是否还有其他安全问题?
也许如果我将这个想法与输入的动态/随机“名称”属性结合起来,我可以成为赢家吗?
注意 - 解决方案需要符合XHTML Mobile Profile。
另外,请不要在这里告诉我语义上的正确性。我的首要任务是安全性,而不是语义。 :)
答案 0 :(得分:5)
糟糕的想法 - 浏览器会记住文本字段,它不会像密码一样自动输入。相反,它会建议密码作为所有人都可以看到的自动完成。我还认为在某人的肩膀上读密码比阅读他们的按键要容易得多。
一些浏览器不尊重密码的自动完成选项的原因可能是因为密码是通过一个单独的(理论上更安全的)处理/存储密码数据的方法来处理的 - 显然通过使用文本字段你绕过这个系统的任何东西需要承担的风险。
我不认为有一个确定的解决方案不涉及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添加自动完成属性(再次,显然这不会在没有启用js的情况下工作):
$('#form1').attr('autocomplete', 'off');
作为补充一点,防止密钥记录器的最简单方法是提供一个选择选项下拉框并要求他们输入密码中的字母/数字。实际上,您必须将密码限制为字母数字,并要求用户在一系列下拉菜单中输入密码中至少三个字母/数字。
<强>摘要强>
没有完美的解决方案,但有很多选择,你必须考虑什么是适合你的。我可能会把ajax调用作为主要方法。您最初可以加载到表单的链接,并使用ajax内容动态替换它,以便仍然有非js用户的选项(减少自动完成权限的用户)