我创建了 2 个相同域的登录页面。
我在这两个页面中放置了 2 个表格的不同表格名称。我还autocomplete = 'off'
为第二种形式和该形式中的文本字段输入了。(但它适用于第一种形式)。
现在,如果我在从浏览器登录时保存用户名和密码www.testDomain.com/login.cfm
,那么即使自动完成功能关闭,用户名列表也会自动填充到第二个登录页面的用户名字段中。出于安全原因,我需要阻止它。有没有办法做到这一点?我正在使用 FireFox V21。
我创建了 2 个相同域的登录页面。
我在这两个页面中放置了 2 个表格的不同表格名称。我还autocomplete = 'off'
为第二种形式和该形式中的文本字段输入了。(但它适用于第一种形式)。
现在,如果我在从浏览器登录时保存用户名和密码www.testDomain.com/login.cfm
,那么即使自动完成功能关闭,用户名列表也会自动填充到第二个登录页面的用户名字段中。出于安全原因,我需要阻止它。有没有办法做到这一点?我正在使用 FireFox V21。
这是我发现阻止 Firefox 自动完成的最干净的解决方案。
<!-- The text and password here are to prevent FF from auto filling my login credentials because it ignores autocomplete="off"-->
<input type="text" style="display:none">
<input type="password" style="display:none">
在您输入的密码类型上方添加此代码片段。
据我所知,Firefox 正在寻找密码类型的输入,并填写密码,然后将用户名添加到其上方文本类型的输入中。如果没有名称或 ID,则输入不会添加到帖子中,但这仍然是一个 hack。
$("#CVV").on("focusout", function() {
if ($(this).val() == "") {
$(this).attr("type", "text");
}
});
<input type="text" name="username" class="input" ID="CVV" onfocus="removeErr('CVV'); $(this).attr('type', 'password');">
你们都应该试试这个属性:
<input type="password" autocomplete="new-password" />
如果您正在定义一个用户管理页面,其中用户可以为另一个人指定新密码,因此您希望防止自动填充密码字段,您可以使用 autocomplete="new-password"。
Firefox 版本 61 这似乎足以禁用表单中的自动完成功能:
<input type="password" hidden />
表单顶部此输入之后的所有输入都将被忽略。
这对我有用:
<input type="text" name="username" value=" " onclick="if(this.value == ' ') this.value=''" >
单击此处了解有关此的更多信息。
I was encountered this issue for a long time. Firefox was kept input values even page reload. Setting autocomplete
attribute to off
did not solve.
Form caching is a really useful mechanism for the user experience. But, in the small percentage of use-cases like translating values of textboxes or texareas to other language, these gave me headache.
To resolve this, just simply reset the form after page was loaded as
$('form').trigger("reset");
密码字段对我没有任何作用,所以我将分享我的技巧
<input name="password" type="text" onkeydown="this.type='password'">
我相信它仍然是安全的,并且适用于 Chrome、Firefox 等
我最近也注意到了这种行为——仅限 Firefox;' autocomplete="off" ' 属性似乎有问题。
一直到一个月前都很好用 - 并且在Firefox 30.0 版发布时就中断了。
在 Chrome + IE 上仍然很好用;
https://bugzilla.mozilla.org/show_bug.cgi?id=956906
http://lists.w3.org/Archives/Public/public-webapps/2014JanMar/0015.html
密码类型输入字段的自动完成功能已被禁用。上面的链接分别提到了 FireFox 和 IE,但我发现将表单的自动完成设置为关闭也不起作用。
Firefox 找不到这些字段的一种方法是在发布之前将它们的类型更改为隐藏。
您可以使用 jQuery 或 JavaScript 在提交按钮的 onclientclick 上进行设置。
例子:
<script type="text/javascript">
function setHidden() { $('.input').prop('type', 'hidden'); }
</script>
<input type="text" name="username" class="input">
<input type="password" name="password" class="input" >
<asp:Button ID="ubtnLogin" Text='OK' runat="server" OnClick="btnLogin_Click" OnClientClick='setHidden();' />
请记住在测试之前清除浏览器的缓存或使用私有模式 (CTRL+SHIFT+P)。
Try this :
<input type="password" style="display:none">
<input type="password" name="password">
类型必须相同。隐藏密码将被填充,而不是真正的密码输入。
如果是新密码(或重置),请使用autocomplete="new-password"而不是autocomplete="off"。
希望能帮助到你。
感谢 albert.garipov 的想法,我制作了一个模仿密码类型功能的解决方案。这不会在输入时显示密码
<input type="text" id="password" onkeyup="OnChangePassword()">
function OnChangePassword()
{
if ($("#password").val() == "") {
$("#password").attr('type', 'text');
}
if ($("#password").val() != "") {
$("#password").attr('type', 'password');
}
}
我用 Firefox 52 尝试了上述所有方法,但没有任何效果。我确实让它与 jQuery 一起工作,并用原始值替换了该值,或者:
jQuery(window).load( function () {
email = jQuery('#auth_user_email');
email.prop('value', email.attr('value'));
});
在 jQuery 中,prop 是文档中的当前值,而 attr 是第一次检索/加载文档时的原始值。我使用了 load 函数,因为它在 ready 函数之后运行,并且我相信在自动完成覆盖输入值之后肯定会。你也可以用密码输入做同样的事情。
只需在自动完成中放置一个随机值。
<input autocomplete = "!!1337!!">
在输入标签的末尾使用 autocomplete="off" 标签:
例如。
<input type="text" name="username" autocomplete="off" />
我意识到这是一个老问题,但由于它在谷歌搜索中仍然相关,我相信提出另一种观点很重要,它反对这里的许多答案,虽然本意很好,但有些短视。
防止登录输入的自动填充可能会导致很多问题。没有好处和明显的缺点。人类不善于记住凭据,导致没有密码管理器的人在多个(通常是关键的)站点上使用相同的密码。如果其中一个站点遭到入侵,攻击者很有可能使用相同的凭据登录其他站点。LastPass、Bitwarden、Dashlane、Onepassword 等工具的存在都有充分的理由:它们通过促进每个网站使用单独的密码来帮助为大多数用户保持网络更安全。
Mozilla、谷歌和微软都同意这一点,并故意决定autocomplete="off"
在许多情况下忽略该指令,从长远来看,它可能更有益。有关这方面的更多详细信息,我建议您查看以下来自 Mozilla、Google/Chromium、Microsoft 和 Web 超文本应用程序技术工作组的文章:
现在,您可能会在具有严格合规性要求的行业中编写内部应用程序。在这种环境中禁用登录表单的自动填充似乎是个好主意,因为如果不理会共享密码的可能性更大。我对此的回答是,这超出了前端 Web 开发人员的范围,应该由桌面体验和 IT 运营团队负责。
IT 部门可以通过多种方式对工作站实施控制,以防止自动密码共享。组策略、SCCM、最低权限帐户配置等都只是冰山一角,它们比试图告诉用户代理禁用自动完成功能要强大得多。
tl;dr:请花时间了解您正在开发的平台,并且不要绕过规范来禁用自动完成功能。