Html 使用type=”是否安全;“文本”;密码字段?

Html 使用type=”是否安全;“文本”;密码字段?,html,browser,input,passwords,autofill,Html,Browser,Input,Passwords,Autofill,我对它进行了研究,但找不到一种标准、可靠的方法来让浏览器防止自动填充,并且不记得标准登录表单中的密码 这对我来说很重要,因为我正在开发一个移动web应用程序,所以如果用户单击注销,而其他人得到了他们的手机,浏览器不应该仅仅通过给他们密码来帮助他们 我能想到的唯一解决方案是将密码字段type=“text”设置为 当然,这意味着人们可以“肩上冲浪”并查看用户输入的密码,但同样的人也可以轻松地观察用户的手指以查看他们输入的密码 我认为间谍软件在这里也不是一个真正的问题,因为我不认为type=“pass

我对它进行了研究,但找不到一种标准、可靠的方法来让浏览器防止自动填充,并且不记得标准登录表单中的密码

这对我来说很重要,因为我正在开发一个移动web应用程序,所以如果用户单击注销,而其他人得到了他们的手机,浏览器不应该仅仅通过给他们密码来帮助他们

我能想到的唯一解决方案是将密码字段type=“text”设置为

当然,这意味着人们可以“肩上冲浪”并查看用户输入的密码,但同样的人也可以轻松地观察用户的手指以查看他们输入的密码

我认为间谍软件在这里也不是一个真正的问题,因为我不认为type=“password”字符掩码可以阻止恶意键盘记录程序等做它的事情

因此,我想知道,如果我在密码字段中使用type=“text”,是否会遗漏任何其他安全问题

也许如果我将这个想法与输入的动态/随机“name”属性结合起来,我会成为赢家吗

注意:该解决方案需要符合XHTML移动配置文件


另外,请不要就这里的语义正确性向我提出建议。我的首要任务是安全,而不是语义。:)

坏主意-浏览器会记住文本字段,只是不会像输入密码那样自动输入。相反,它会建议将密码作为自动完成,让所有人都能看到。我还认为,越过某人的肩膀读取密码比读取他们的击键要容易得多

一些浏览器不尊重密码的自动完成选项的原因可能是因为密码是由一种单独的(理论上更安全)方法来处理/存储密码数据的——显然,通过使用文本字段,你会绕过这个系统,而不管会带来什么风险

我不认为有一个明确的解决方案不涉及js,因为在一天结束时,你无法真正控制他们的浏览器记住什么。您只能提供提示和建议。这将由不同的浏览器以不同的方式处理。您最好从添加以下内容开始:

自动完成=“关闭”

到您的表单和输入。适用于大多数浏览器,但不是所有浏览器

上述内容将包含在表单标签和密码输入标签中,类似于:

<form id="form1_randomstring" name="form1" method="post" action="process.php" autocomplete="off">
<input name="password_randomstring" type="password" value="">
如果不运行js,显然没有帮助

最终解决方案(可能? 您可以更进一步,使用ajax调用注入表单字段(再加上生成随机表单名+自动完成并通过ssl提供页面)。这意味着js将是登录的一个要求,但您可以确保该字段是清晰的,并在页面加载后生成表单。我会挑战任何浏览器来完成它

如果您选择该选项,则外部页面和ajax加载页面都必须通过ssl运行—如果您不希望这样做,另一种选择可能是通过iframe加载ssl表单(同样需要权衡—需要考虑用户群)

根据您的需求和用户群,这可能是最有保障的选项

注意

Autocomplete=“off”可能无法通过严格的XHTML验证。然后,一个选项可能是在使用jquery加载页面后添加autocomplete属性(同样,显然,如果没有启用js,这将不起作用):

另外,防止键盘记录的最简单方法是提供一个选择选项下拉框,让他们输入密码中的字母/数字。实际上,您必须将密码限制为字母数字,并要求用户在一系列下拉列表中输入密码中的至少三个字母/数字

摘要


没有完美的解决方案,但有很多选择,你必须考虑什么是适合你的。我可能会选择ajax调用作为主要方法。您可以首先加载表单的链接,并用ajax内容动态替换它,这样非js用户(较少的用户受到自动完成的影响)仍然可以选择。

没有什么可以阻止浏览器记住文本输入。事实上,它可能会更容易记住它们,因为它们“不安全”。浏览器记住或不记住任何东西是一个设备设置,而不是服务器设置。你可以向用户提出建议,但如果他们希望他们的设备记住他们的密码,那么你不应该试图破坏这一点。谢谢,大卫,但我认为必须有一个更好的解决方案,而不是让人们离开并调整他们的设备设置。绝大多数用户会觉得这太麻烦了,以前从未接触过这些设置。我并没有破坏任何用户偏好,因为我提供了自己的“记住密码”复选框。浏览器设置的问题在于,一旦用户(通过浏览器对话框)允许浏览器记住密码,他们就很难让浏览器忘记密码。(为“记住密码”和“注销”添加一些UI代码对每个人来说都容易得多。)此外,Deceze,浏览器似乎没有记住密码,因为我正在使用动态/随机“名称”属性进行输入,如我的问题中所述。但是,如果我使用带有动态/随机“name”属性的type=“password”,则密码是自动填充的。单独使用autocomplete=“off”在FireFox(v18.0.2)中不起作用,而将其与type=“text”结合使用似乎起作用。您是否在表单和密码字段中设置了它?您可以尝试的另一件事是通过ssl运行表单。它应该更加谨慎地对待它所记住的内容。“将表单和输入名称随机化也会诱使一些浏览器认为它正在处理一个不同的表单”——尽管如此
$("input[type='password']").val('');
$('#form1').attr('autocomplete', 'off');