【问题标题】:autocomplete = 'off' is not working on firefox自动完成 = 'off' 在 Firefox 上不起作用
【发布时间】:2013-07-20 19:18:21
【问题描述】:

我创建了 2 个相同域的登录页面。

  1. www.example.com/login.cfm
  2. www.example.com/newLogin.cfm

我在这两个页面中放置了 2 个表格不同的表格名称。此外,我将autocomplete = 'off' 用于第二个表单和该表单内的文本字段。(但它适用于第一个表单)。

现在,如果我在浏览器中从www.testDomain.com/login.cfm 登录时保存用户名和密码,那么即使自动完成功能关闭,用户名列表也会自动填充到第二个登录页面的用户名字段中。出于安全原因,我需要阻止它。有没有办法做到这一点?我正在使用 FireFox V21。

【问题讨论】:

标签: html firefox browser


【解决方案1】:

你们都应该试试这个属性:

<input type="password" autocomplete="new-password" />

如果您要定义一个用户管理页面,其中用户可以为另一个人指定新密码,因此您希望防止自动填充密码字段,您可以使用 autocomplete="new-password"。

查看那里的文档:https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion#Preventing_autofilling_with_autocompletenew-password

【讨论】:

  • 鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。请参阅:How to anwser
  • autocomplete="new-password" 在 Firefox 68 中仍然存在问题,如果您导航到不同域的页面,它可以工作,但移动到同一域的另一个页面会触发“保存密码” ' 对话框。
  • Working on FF 75.0b12 这对我来说似乎是更好的解决方案,只是浏览器支持问题。
【解决方案2】:

密码字段对我没有用,所以我将分享我的技巧

<input name="password" type="text" onkeydown="this.type='password'">

我相信它仍然是安全的,并且适用于 Chrome、Firefox 等

【讨论】:

    【解决方案3】:

    只需在自动完成中输入一个随机值。

    <input autocomplete = "!!1337!!">
    

    【讨论】:

      【解决方案4】:

      我遇到这个问题很久了。即使页面重新加载,Firefox 也会保留输入值。将autocomplete 属性设置为off 没有解决。

      表单缓存是一种非常有用的用户体验机制。但是,在一小部分用例中,例如将文本框或 texareas 的值翻译成其他语言,这让我很头疼。

      要解决这个问题,只需在页面加载后重置表单

       $('form').trigger("reset");
      

      【讨论】:

      • 谢谢。这解决了我在创建带有 accountID 和 password 字段的新用户帐户的巨大表单时遇到的问题,这些字段都用于登录,并且每次访问“新帐户”表单时,当前用户的 accountID 和密码都会自动填充事件用户将其凭据存储在浏览器中。
      【解决方案5】:

      Firefox 版本 61 这似乎足以禁用表单中的自动完成功能:

      <input type="password" hidden />
      

      表单顶部此输入之后的所有输入都将被忽略。

      【讨论】:

        【解决方案6】:

        感谢 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');
          }
        }
        

        【讨论】:

          【解决方案7】:

          $("#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');">
          

          【讨论】:

          • 我到处寻找 FF 解决方案。这终于成功了。谢谢。
          • 很好,如果密码已经保存,自动完成关闭显然不起作用。
          • 密码自动完成功能仍未禁用
          • 你应该使用
          【解决方案8】:

          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)。

          【讨论】:

            【解决方案9】:

            我意识到这是一个老问题,但由于它仍然与 Google 搜索相关,我认为提出另一种观点很重要,它反对这里的许多答案,虽然本意是好的,但有些短视。

            防止自动填充登录输入会导致很多问题。没有好处和明显的缺点。人类不善于记住凭据,导致没有密码管理器的人在多个(通常是关键的)站点上使用相同的密码。如果其中一个站点遭到入侵,攻击者很有可能使用相同的凭据登录其他站点。 LastPass、Bitwarden、Dashlane、Onepassword 等工具的存在都有充分的理由:它们通过促进每个网站使用单独的密码,帮助为大多数用户保持网络更安全。

            Mozilla、Google 和 Microsoft 都支持这一点,并有意决定在许多情况下忽略 autocomplete="off" 指令,从长远来看,它可能更有益。有关这方面的更多详细信息,我建议您查看以下来自 Mozilla、Google/Chromium、Microsoft 和 Web 超文本应用程序技术工作组的文章:

            现在,您可能会在具有严格合规要求的行业中编写内部应用程序。在这种环境中禁用登录表单的自动填充似乎是个好主意,因为如果不理会共享密码的可能性更大。我对此的回答是,这超出了前端 Web 开发人员的范围,应该由桌面体验和 IT 运营团队负责。

            IT 部门可以通过多种方式对工作站实施控制,以防止自动共享密码。组策略、SCCM、最低权限帐户配置等都只是冰山一角,它们比试图告诉用户代理禁用自动完成功能更强大旨在以这种方式运行。

            tl;dr:请花时间了解您正在开发的平台,不要绕过规范来禁用自动完成。

            【讨论】:

            • 您的假设完全错误 - 我正在编写一个电子学习应用程序 - 这是在课堂上使用的 - 在每节课中,不同的学生组使用相同的机器(和浏览器)来运行Web应用程序。他们还使用此应用程序进行了测试 - 这意味着必须完全禁用自动完成功能(不仅在登录屏幕中)。我认为自动完成功能应该完全由应用程序控制。
            • 并非所有带有密码字段的表单都是登录表单。我的应用程序有一个登录表单和一个注册表单(我相信这并不罕见;-)。在保存登录密码的情况下注册新帐户时,在注册表单中自动填写保存的登录密码是没有意义的。
            • @chris 我认为这是使用自动填充 API 解决的工具的问题。
            • @yarg:如果这些机器处于进行测试的环境中,那么负责系统维护的人员应该严格控制它们上安装的内容。应用程序没有理由需要禁用自动填充,因为首先这些机器上不应该有自动填充功能。
            • 为什么我会遇到很多从微软网站删除现有链接/文章/页面的情况?这感觉像是一个突破性的变化。顺便说一句,由于引用的链接,投票赞成。谢谢。
            【解决方案10】:

            我在 Firefox 52 上尝试了上述所有方法,但没有任何效果。我确实让它与 jQuery 一起工作,并将值替换为原始值,或者:

            jQuery(window).load( function () {
                email = jQuery('#auth_user_email');
                email.prop('value', email.attr('value'));
            });
            

            在 jQuery 中,prop 是文档中的当前值,而 attr 是第一次检索/加载文档时的原始值。我使用了 load 函数,因为它在 ready 函数之后运行,并且我相信在自动完成覆盖输入值之后肯定会。你也可以用密码输入做同样的事情。

            【讨论】:

              【解决方案11】:

              在输入标签的末尾使用 autocomplete="off" 标签:

              例如。

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

              【讨论】:

                【解决方案12】:
                Try this :
                <input type="password" style="display:none">
                <input type="password" name="password">
                

                类型必须相同。隐藏密码将被填充,而不是真正的密码输入。

                如果是新密码(或重置),请使用 autocomplete="new-password" 而不是 autocomplete="off"

                希望对你有帮助。

                【讨论】:

                  【解决方案13】:

                  这是我发现的最干净的解决方案,可以防止 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。

                  【讨论】:

                  • 这对我来说效果很好,我不敢相信这是 2015 年 8 月,而且这种 hacky 方法是必要的,通用 HTML 标准解决了这个问题。
                  • 我正要说同样的话,所以我们开始不得不像在 IE6 时代那样破解现代浏览器,FF 需要加强...这仍然是个问题在我的FF上
                  • 大声笑,还是有问题,^那是我^哈哈哈
                  • 我不敢相信。这很疯狂,但它在 2017 年 6 月 24 日有效。我已经测试了任何其他解决方案,但密码仍然是自动完成的,但现在它已经解决了。
                  • Firefox 61 在这里,它仍然忽略密码字段的自动完成属性。此解决方案适用于我,但隐藏的输入字段需要在表单内
                  【解决方案14】:

                  这对我有用:

                  <input type="text" name="username" value=" " onclick="if(this.value == ' ') this.value=''" >
                  

                  点击here了解更多信息。

                  【讨论】:

                    【解决方案15】:

                    https://bugzilla.mozilla.org/show_bug.cgi?id=956906

                    http://lists.w3.org/Archives/Public/public-webapps/2014JanMar/0015.html

                    密码类型输入字段的自动完成功能已被禁用。上面的链接分别提到了 FireFox 和 IE,但我发现将表单的自动完成设置为关闭也不起作用。

                    【讨论】:

                      【解决方案16】:

                      我最近也注意到了这种行为 - 仅限 Firefox; 'autocomplete="off"' 属性似乎有问题。

                      一个月前以前一直很好用 - 大约在 Firefox 30.0 版 发布时就解散了。

                      在 Chrome + IE 上仍然很好用;

                      【讨论】:

                      【解决方案17】:

                      autocomplete="off" 添加到您的表单标签中,如 Mozilla 文档中所述

                      查看以下链接了解更多信息

                      How to Turn Off the Autocompletion Feature

                      【讨论】:

                      • 我的表单标签、输入标签、保存输入的 div 中都有 autocomplete="off",这太疯狂了,当我双击该字段时它会显示建议,这到底是怎么回事火狐??
                      • 在 Firefox 49.0 上仍然没有
                      猜你喜欢
                      • 2012-04-10
                      • 1970-01-01
                      • 1970-01-01
                      • 2012-07-10
                      • 2013-07-01
                      • 2015-05-21
                      相关资源
                      最近更新 更多