禁用浏览器“保存密码”功能

时间:2008-08-28 14:18:09

标签: security browser autocomplete passwords

为政府医疗保健机构工作的乐趣之一就是不得不应对处理PHI(受保护的健康信息)的所有偏执狂。不要误会我的意思,我尽一切可能保护人们的个人信息(健康,经济,上网习惯等),但有时候人们会有点过于兴奋。

例证:我们的一位州客户最近发现浏览器提供了保存密码的便利功能。我们都知道它已经存在了一段时间并且是完全可选的,并且由最终用户决定是否使用或不使用它。然而,目前有一点骚动,我们被要求找到一种方法来禁用我们网站的功能。

问题:网站是否有办法告诉浏览器不要记住密码?我很长一段时间都在网络开发,但不知道我之前遇到过这个问题。

感谢任何帮助。

35 个答案:

答案 0 :(得分:319)

我不确定它是否适用于所有浏览器,但您应尝试在表单上设置autocomplete =“off”。

<form id="loginForm" action="login.cgi" method="post" autocomplete="off">
  

禁用表单和密码存储提示并阻止表单数据在会话历史记录中缓存的最简单最简单的方法是使用值为“off”的自动填充表单元素属性。

     

来自http://developer.mozilla.org/En/How_to_Turn_Off_Form_Autocompletion

一些小的研究表明,这适用于IE,但我不会保证;)

@Joseph:如果严格要求将XHTML验证与实际标记一起传递(不知道为什么会这样),理论上可以在之后使用javascript添加此属性,但随后禁用js的用户(可能如果您的网站需要js,那么您的用户群可忽略不计或为零仍将保存其密码。

jQuery示例:

$('#loginForm').attr('autocomplete', 'off');

答案 1 :(得分:37)

我一直在努力解决这个问题,这个问题有一个独特的转折点。特权用户无法使用已保存的密码,但普通用户需要它。这意味着特权用户必须登录两次,第二次不强制保存密码。

根据此要求,标准autocomplete="off"方法不适用于所有浏览器,因为密码可能是从第一次登录时保存的。一位同事在使用新密码字段聚焦时找到了替换密码字段的解决方案,然后专注于新密码字段(然后挂钩相同的事件处理程序)。这有效(除了它在IE6中引起了无限循环)。也许有一种方法,但它导致我偏头痛。

最后,我尝试在表单之外使用用户名和密码。令我惊讶的是,这有效!它适用于IE6,以及Linux上当前版本的Firefox和Chrome。我没有进一步测试过,但我怀疑它在大多数浏览器中都有效(但如果有一个浏览器并不关心是否没有形式,那就不会让我感到惊讶)。

以下是一些示例代码,以及一些使其工作的jQuery:

<input type="text" id="username" name="username"/>
<input type="password" id="password" name="password"/>

<form id="theForm" action="/your/login" method="post">
  <input type="hidden" id="hiddenUsername" name="username"/>
  <input type="hidden" id="hiddenPassword" name="password"/>
  <input type="submit" value="Login"/>
</form>

<script type="text/javascript" language="JavaScript">
  $("#theForm").submit(function() {
    $("#hiddenUsername").val($("#username").val());
    $("#hiddenPassword").val($("#password").val());
  });
  $("#username,#password").keypress(function(e) {
    if (e.which == 13) {
      $("#theForm").submit();
    }
  });
</script>

答案 2 :(得分:32)

只需使用

  

readonly onfocus =“this.removeAttribute('readonly');”

除了

  

autocomplete =“off”

到您不想记住表单数据的输入(usernamepassword等),如下所示:

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

在主要浏览器的最新版本上进行测试,例如Google ChromeMozilla FirefoxMicrosoft Edge等,并且像魅力一样。希望这会有所帮助...

答案 3 :(得分:28)

嗯,这是一个非常古老的帖子,但我仍然会提供我的解决方案,我的团队一直试图实现这一目标。我们刚添加了一个新的输入类型=&#34;密码&#34;表单内的字段并将其包装在div中并使div隐藏。确保此div在实际密码输入之前。 这对我们有用,并没有给出任何保存密码选项

普兰克 - http://plnkr.co/edit/xmBR31NQMUgUhYHBiZSg?p=preview

HTML:

<form method="post" action="yoururl">
      <div class="hidden">
        <input type="password"/>
      </div>
      <input type="text" name="username" placeholder="username"/>
      <input type="password" name="password" placeholder="password"/>
    </form>

CSS:

.hidden {display:none;}

答案 4 :(得分:16)

您可以通过随机化每个节目上用于密码字段的名称来阻止浏览器匹配表单。然后浏览器会看到相同网址的密码,但无法确定它是相同的密码。也许它控制着别的东西。

更新请注意,除了之外,还应该使用自动填充功能或其他策略,而不是替换它们,原因是其他原因。

另请注意,这只会阻止浏览器自动完成密码。它不会阻止存储密码,无论浏览器选择使用哪种安全级别。

答案 5 :(得分:14)

使用真实two-factor authentication来避免对密码的唯一依赖,密码可能存储在比用户的浏览器缓存更多的地方。

答案 6 :(得分:13)

最干净的方法是使用autocomplete="off"标记属性 当您使用Tab键切换字段时,Firefox无法正确遵守它。

你可以阻止这种情况的唯一方法是添加一个伪造的隐藏密码字段,欺骗浏览器在那里填充密码。

<input type="text" id="username" name="username"/>
<input type="password" id="prevent_autofill" autocomplete="off" style="display:none" tabindex="-1" />
<input type="password" id="password" autocomplete="off" name="password"/>

这是一个丑陋的黑客,因为你改变了浏览器的行为,这应该被认为是不好的做法。只有在你真的需要时才使用它。

注意:这将有效地停止密码自动填充,因为FF将“保存”#prevent_autofill的值(为空)并将尝试填充任何已保存的密码,因为它始终使用第一个{{1输入它在相应的“用户名”输入后在DOM中找到。

答案 7 :(得分:12)

我已经测试过在所有主流浏览器中在表单标记中添加autocomplete =“off”。事实上,到目前为止,美国大多数人都在使用IE8。

  1. IE8,IE9,IE10,Firefox,Safari都运行正常。
      

    浏览器没有询问“保存密码”。   此外,以前保存的用户名和&amp;密码未填充。

  2. Chrome&amp; IE 11不支持autocomplete =“off”功能
  3. FF支持autocomplete =“off”。但有时存在保存 凭据已填充。
  4. 于2014年6月11日更新

    最后,下面是一个使用javascript的跨浏览器解决方案,它在所有浏览器中都运行良好。

    需要在登录表单中删除“表单”标记。在客户端验证之后,将该凭证以隐藏的形式提交并提交。

    另外,添加两种方法。一个用于验证“validateLogin()”,另一个用于监听输入事件,同时单击输入文本框/密码/按钮“checkAndSubmit()”。因为现在登录表单没有表单标签,所以输入事件不在这里工作。

    <强> HTML

    <form id="HiddenLoginForm" action="" method="post">
    <input type="hidden" name="username" id="hidden_username" />
    <input type="hidden" name="password" id="hidden_password" />
    </form>
    
    Username: <input type="text" name="username" id="username" onKeyPress="return checkAndSubmit(event);" /> 
    Password: <input type="text" name="password" id="password" onKeyPress="return checkAndSubmit(event);" /> 
    <input type="button" value="submit" onClick="return validateAndLogin();" onKeyPress="return checkAndSubmit(event);" /> 
    

    <强>的Javascript

    //For validation- you can modify as you like
    function validateAndLogin(){
      var username = document.getElementById("username");
      var password = document.getElementById("password");
    
      if(username  && username.value == ''){
        alert("Please enter username!");
        return false;
      }
    
      if(password && password.value == ''){
        alert("Please enter password!");
        return false;
      }
    
      document.getElementById("hidden_username").value = username.value;
      document.getElementById("hidden_password").value = password.value;
      document.getElementById("HiddenLoginForm").submit();
    }
    
    //For enter event
    function checkAndSubmit(e) {
     if (e.keyCode == 13) {
       validateAndLogin();
     }
    }
    
    祝你好运!!!

答案 8 :(得分:7)

不是真的 - 你唯一可以做到的就是在网站上提供建议;也许,在他们第一次登录之前,你可以向他们展示一个表格,其中包含的信息表明他们不允许浏览器存储密码。

然后,用户将立即按照建议,在便利贴上写下密码并将其录制到显示器上。

答案 9 :(得分:6)

我一直在做的是使用javascript / jQuery自动完成=“关闭”和清除密码字段的组合。

jQuery示例:

$(function() { 
    $('#PasswordEdit').attr("autocomplete", "off");
    setTimeout('$("#PasswordEdit").val("");', 50); 
});

使用setTimeout(),您可以在清除之前等待浏览器完成该字段,否则浏览器将在您清除该字段后自动完成。

答案 10 :(得分:3)

因为自动完成=&#34;关闭&#34;不适用于密码字段,必须依赖于JavaScript。这是一个简单的解决方案,基于此处的答案。

添加属性data-password-autocomplete =&#34; off&#34;到您的密码字段:

<input type="password" data-password-autocomplete="off">

包括以下JS:

$(function(){
    $('[data-password-autocomplete="off"]').each(function() {
        $(this).prop('type', 'text');
        $('<input type="password"/>').hide().insertBefore(this);
        $(this).focus(function() {
            $(this).prop('type', 'password');
        });
    });     
});

此解决方案适用于Chrome和FF。

答案 11 :(得分:3)

如果自动完成=&#34;关闭&#34;不起作用...删除表单标记并使用div标记,然后使用jquery将表单值传递给服务器。这对我有用。

答案 12 :(得分:2)

让人们意识到 - “自动完成”属性大部分时间都可以使用,但高级用户可以使用小书签来解决它。

使用浏览器保存密码实际上增加了对键盘记录的保护,因此最安全的选择可能是在浏览器中保存密码,但使用主密码保护密码(至少在Firefox中)。

答案 13 :(得分:2)

我有一个工作,这可能会有所帮助。

您可以制作自定义字体黑客。因此,制作一个自定义字体,例如所有字符为点/圆/星。将其用作您网站的自定义字体。检查如何在inkscape中执行此操作:how to make your own font

然后在您的登录表单中使用:

<form autocomplete='off'  ...>
   <input type="text" name="email" ...>
   <input type="text" name="password" class="password" autocomplete='off' ...>
   <input type=submit>
</form>

然后添加你的css:

@font-face {
    font-family: 'myCustomfont';
    src: url('myCustomfont.eot');
    src: url('myCustomfont?#iefix') format('embedded-opentype'),
         url('myCustomfont.woff') format('woff'),
         url('myCustomfont.ttf') format('truetype'),
         url('myCustomfont.svg#myCustomfont') format('svg');
    font-weight: normal;
    font-style: normal;

}
.password {
  font-family:'myCustomfont';
}

漂亮的跨浏览器兼容。我试过IE6 +,FF,Safari和Chrome。只需确保您转换的oet字体不会被破坏。希望有帮助吗?

答案 14 :(得分:1)

我在autocomplete="off"之上尝试过,但还是成功了。如果你使用角度js我的建议是按钮和ng点击。

<button type="button" class="" ng-click="vm.login()" />

这已经有了一个已接受的答案我添加了这个,如果有人不能解决问题,接受他的机制可以接受的答案。

感谢您提出问题和答案。

答案 15 :(得分:1)

我测试了很多解决方案。动态密码字段名称,多个密码字段(对于假密码字段不可见),将输入类型从“文本”更改为“密码”,自动完成=“关闭”,自动完成=“新密码”,...但最近没有解决它浏览器。

为了摆脱密码记住,我终于将密码视为输入字段,并“模糊”键入的文本。

它比本机密码字段更“安全”,因为选择键入的文本会将其显示为明文,但不会记住密码。它还取决于Javascript的激活。

您将从导航器中估算使用以下提案与密码记忆选项的风险。

虽然用户可以管理密码记忆(每个网站废弃),但对于个人计算机而言,这是好的,而不是“公共”或共享计算机。

我的情况是在共享计算机上运行的ERP,所以我将尝试下面的解决方案。

<input style="background-color: rgb(239, 179, 196); color: black; text-shadow: none;" name="password" size="10" maxlength="30" onfocus="this.value='';this.style.color='black'; this.style.textShadow='none';" onkeypress="this.style.color='transparent'; this.style.textShadow='1px 1px 6px green';" autocomplete="off" type="text">

答案 16 :(得分:1)

我的js(jquery)解决方法是将密码输入类型更改为表单提交上的文本。密码可能会在一秒钟内显示,因此我也会在此之前隐藏输入。 我宁愿不将此用于登录表单,但它有用(与autocomplete =“off”一起),例如网站的内部管理部分。

在提交表单之前,请尝试将其放入控制台(使用jquery)。

$('form').submit(function(event) {
    $(this).find('input[type=password]').css('visibility', 'hidden').attr('type', 'text');
});

在Chrome 44.0.2403.157(64位)上测试。

答案 17 :(得分:1)

解决此问题的最简单方法是将INPUT字段放在FORM标记之外,并在FORM标记内添加两个隐藏字段。然后在表单数据被提交到服务器副本值之前的提交事件侦听器中,从可见输入到不可见输入。

以下是一个示例(您无法在此处运行,因为表单操作未设置为真正的登录脚本):

&#13;
&#13;
<!doctype html>
<html>
<head>
  <title>Login & Save password test</title>
  <meta charset="utf-8">
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>

  <body>
      <!-- the following fields will show on page, but are not part of the form -->
      <input class="username" type="text" placeholder="Username" />
      <input class="password" type="password" placeholder="Password" />

      <form id="loginForm" action="login.aspx" method="post">
        <!-- thw following two fields are part of the form, but are not visible -->
        <input name="username" id="username" type="hidden" />
        <input name="password" id="password" type="hidden" />
        <!-- standard submit button -->
        <button type="submit">Login</button>
      </form>

    <script>
      // attache a event listener which will get called just before the form data is sent to server
      $('form').submit(function(ev) {
        console.log('xxx');
        // read the value from the visible INPUT and save it to invisible one
        // ... so that it gets sent to the server
        $('#username').val($('.username').val());
        $('#password').val($('.password').val());
      });
    </script>

  </body>
</html>
&#13;
&#13;
&#13;

答案 18 :(得分:1)

马库斯提出了一个很好的观点。我决定查找autocomplete属性并获得以下内容:

  

使用它的唯一缺点   属性是它不标准   (它适用于IE和Mozilla浏览器),   并将导致XHTML验证   失败。我认为这是一个案例   打破验证是合理的   然而。 source

所以我不得不说,尽管它不能100%全面运行,但它在主流浏览器中处理,因此它是一个很好的解决方案。

答案 19 :(得分:0)

这是我的解决方案的html代码。 它适用于Chrome-Safari-Internet Explorer 。我创建了新字体,所有字符都显示为“●”。然后,将这种字体用于密码文本。注意:我的字体名称是“ passwordsecretregular”。

std::string

答案 20 :(得分:0)

面对同样的HIPAA问题,找到了一个相对简单的解决方案,

  1. 使用字段名称作为数组创建隐藏密码字段。

    <input type="password" name="password[]" style="display:none" />
    
  2. 对实际密码字段使用相同的数组。

    <input type="password" name="password[]" />
    
  3. 浏览器(Chrome)可能会提示您输入密码&#34;但无论用户选择保存,下次登录密码时都会自动填充隐藏密码字段,即阵列中的零插槽,将第一个插槽留空。

    我尝试定义数组,例如&#34;密码[part2]&#34;但它仍然记得。如果它是一个未编制索引的数组,我认为它会抛弃它,因为它别无选择,只能将它放在第一个位置。

    然后使用您选择的编程语言来访问数组,例如PHP,

    echo $_POST['password'][1];
    

答案 21 :(得分:0)

由于大多数autocomplete建议(包括已接受的答案)都不适用于当今的网络浏览器(即网络浏览器密码管理器忽略autocomplete),因此更为新颖解决方案是在passwordtext类型之间进行交换,并在字段为纯文本字段时使背景颜色与文本颜色匹配,当用户成为真实密码字段时,该字段继续隐藏密码(或像KeePass这样的程序)正在输入密码。浏览器不会要求保存存储在纯文本字段中的密码。

这种方法的优点是它允许渐进增强,因此不需要Javascript使字段作为普通密码字段起作用(您也可以从纯文本字段开始,并应用相同的方法但这并不符合HIPAA PHI / PII标准。这种方法也不依赖于可能不一定被发送到服务器的隐藏表单/字段(因为它们是隐藏的),并且其中一些技巧也不能在几个现代浏览器中工作。

jQuery插件:

https://github.com/cubiclesoft/php-flexforms-modules/blob/master/password-manager/jquery.stoppasswordmanager.js

以上链接的相关源代码:

(function($) {
$.fn.StopPasswordManager = function() {
    return this.each(function() {
        var $this = $(this);

        $this.addClass('no-print');
        $this.attr('data-background-color', $this.css('background-color'));
        $this.css('background-color', $this.css('color'));
        $this.attr('type', 'text');
        $this.attr('autocomplete', 'off');

        $this.focus(function() {
            $this.attr('type', 'password');
            $this.css('background-color', $this.attr('data-background-color'));
        });

        $this.blur(function() {
            $this.css('background-color', $this.css('color'));
            $this.attr('type', 'text');
            $this[0].selectionStart = $this[0].selectionEnd;
        });

        $this.on('keydown', function(e) {
            if (e.keyCode == 13)
            {
                $this.css('background-color', $this.css('color'));
                $this.attr('type', 'text');
                $this[0].selectionStart = $this[0].selectionEnd;
            }
        });
    });
}
}(jQuery));

演示:

https://barebonescms.com/demos/admin_pack/admin.php

点击&#34;添加条目&#34;在菜单中,然后滚动到页面底部的&#34;模块:停止密码管理器&#34;。

免责声明:虽然此方法适用于有视力的人,但屏幕阅读器软件可能存在问题。例如,屏幕阅读器可能会大声读出用户的密码,因为它看到了纯文本字段。使用上述插件可能还有其他无法预料的后果。通过测试各种条件和边缘情况,应该谨慎地改变内置的Web浏览器功能。

答案 22 :(得分:0)

真正的问题比仅仅为HTML添加属性要深刻得多 - 这是常见的安全问题,这就是人们为了安全而发明硬件密钥和其他疯狂事物的原因。

想象一下,你有autocomplete =&#34; off&#34;完美适用于所有浏览器。这有助于安全吗?当然不。用户将在教科书中,在他们的监视器上贴上的贴纸上写下他们的密码,每个办公室访问者都可以看到它们,将它们保存到桌面上的文本文件等等。

通常,Web应用程序和Web开发人员不以任何方式对最终用户安全负责。最终用户只能保护自己。理想情况下,他们必须保留所有密码,并使用密码重置功能(或联系管理员),以防他们忘记密码。否则,总会存在以某种方式看到和窃取密码的风险。

所以要么你有一些疯狂的安全策略与硬件密钥(例如,一些银行提供基本上采用双因素身份验证的网上银行)或基本上没有安全。嗯,当然有点过分夸张了。了解您想要防范的是什么非常重要:

  1. 未经授权的访问权限。最简单的登录表单基本上就足够了。有时采取其他措施,如随机安全问题,CAPTCHA,密码强化等。
  2. 凭证嗅闻。如果人们从公共Wi-Fi热点访问您的Web应用程序,则必须使用HTTPS。提及即使使用HTTPS,您的用户也需要定期更改密码。
  3. 内部人员攻击。有两个这样的例子,从简单地从浏览器窃取你的密码或者你在桌面上写下的那些(不需要任何IT技能)开始,最后是会话伪造和拦截本地网络流量(甚至是加密的)并进一步访问Web应用程序,就像它是另一个最终用户一样。
  4. 在这篇特别的帖子中,我可以看到开发人员的要求不足,由于问题的性质,他永远无法解决 - 最终用户的安全性。我的主观观点是,开发人员应该基本上说NO并指出需求问题,而不是浪费时间在这些任务上,老实说。这并不能绝对使您的系统更安全,而是会导致显示器上有贴纸的情况。不幸的是,一些老板只听到他们想听到的内容。但是,如果我是你,我会尝试解释实际问题的来源,以及autocomplete =&#34; off&#34;不会解决它,除非它会强迫用户将所有密码保留在他们的头脑中!开发人员无法完全保护用户,用户需要知道如何使用系统,同时不要暴露他们的敏感/安全信息,这远远超出了身份验证。

答案 23 :(得分:0)

我知道的一种方法是使用(例如)JavaScript在提交表单之前将值复制出密码字段。

这个问题的主要问题是解决方案与JavaScript有关。

然后,再次,如果它可以绑定到JavaScript,您可以在向服务器发送请求之前在客户端散列密码。

答案 24 :(得分:-1)

autocomplete =“off”不能用于在Firefox 31中禁用密码管理器,而且很可能在某些早期版本中也不行。

查看mozilla关于此问题的讨论: https://bugzilla.mozilla.org/show_bug.cgi?id=956906

我们想使用第二个密码字段输入由令牌生成的一次性密码。现在我们使用文本输入而不是密码输入。 : - (

答案 25 :(得分:-1)

我被赋予了类似的任务,通过浏览器禁用自动填写登录名和密码,经过大量的试验和错误,我发现下面的解决方案是最佳的。只需在原始控件之前添加以下控件。

<input type="text" style="display:none">
<input type="text" name="OriginalLoginTextBox">

<input type="password" style="display:none">
<input type="text" name="OriginalPasswordTextBox">

这适用于IE11和Chrome 44.0.2403.107

答案 26 :(得分:-1)

如果您不想信任自动填充标志,则可以确保用户使用onchange事件在框中键入内容。下面的代码是一个简单的HTML表单。隐藏的表单元素password_edited开始设置为0.当更改密码的值时,顶部的JavaScript(pw_edited函数)将值更改为1.按下按钮时,它会在提交表单之前检查valueenter代码。这样,即使浏览器忽略了您并自动填充字段,用户也无法在不输入密码字段的情况下传递登录页面。此外,确保在设置焦点时将密码字段留空。否则,您可以在最后添加一个字符,然后返回并删除它以欺骗系统。我建议另外将autocomplete =“off”添加到密码中,但此示例显示了备份代码的工作方式。

<html>
  <head>
    <script>
      function pw_edited() {
        document.this_form.password_edited.value = 1;
      }
      function pw_blank() {
        document.this_form.password.value = "";
      }
      function submitf() {
        if(document.this_form.password_edited.value < 1) {
          alert("Please Enter Your Password!");
        }
        else {
         document.this_form.submit();
        }
      }
    </script>
  </head>
  <body>
    <form name="this_form" method="post" action="../../cgi-bin/yourscript.cgi?login">
      <div style="padding-left:25px;">
        <p>
          <label>User:</label>
          <input name="user_name" type="text" class="input" value="" size="30" maxlength="60">
        </p>
        <p>
          <label>Password:</label>
          <input name="password" type="password" class="input" size="20" value="" maxlength="50" onfocus="pw_blank();" onchange="pw_edited();">
        </p>
        <p>
          <span id="error_msg"></span>
        </p>
        <p>
          <input type="hidden" name="password_edited" value="0">
          <input name="submitform" type="button" class="button" value="Login" onclick="return submitf();">
        </p>
      </div>
    </form>
  </body>
</html>

答案 27 :(得分:-1)

截至今天,最有前途的答案似乎是@murat 我自己在Firefox上进行了测试,但正如其他人在评论中所建议的那样,它仍然是第一次要求输入密码。然后无论您重新输入密码多少次(在我的情况下,使用Ajax提交)都不会。如果重新加载页面,则会重复上述行为。

我认为银行网站必须具有这样的功能,所以我检查了onlinesbi.com,它做得很完美。它不要求在任何浏览器中都存储密码。我试图检查源,但无法弄清楚,它使用了隐藏元素加上自动完成和js的某种组合。我无法弄清楚,但这个平台上有很多东西,希望有人一定会弄清楚并张贴在这里。

答案 28 :(得分:-1)

  

网站是否有办法告诉浏览器不要记住密码?

该网站使用<input type="password">告诉浏览器它是密码。因此,如果您必须从网站角度执行此操作,那么您必须更改它。 (显然我不建议这样做。)

最好的解决方案是让用户配置他们的浏览器,使其不记得密码。

答案 29 :(得分:-2)

由于Internet Explorer 11不再支持autocomplete="off"字段input type="password"(希望其他浏览器不会跟随他们的领导),最简洁的方法(在撰写本文时)似乎正在让用户提交他们的用户名和密码在不同的页面中,即用户输入用户名,提交,然后输入密码并提交。 Bank Of AmericaHSBC Bank网站也在使用此功能。

由于浏览器无法将密码与用户名相关联,因此不会提供存储密码。这种方法适用于所有主流浏览器(在撰写本文时),并且无需使用Javascript即可正常运行。缺点是它对用户来说会更麻烦,并且需要2次回发才能进行登录操作而不是一次,所以这实际上取决于您的网站需要的安全性。

更新:正如comment Gregory中提到的那样,Firefox将遵循IE11的主导并忽略autocomplete="off"的密码字段。

答案 30 :(得分:-2)

另一个解决方案是使用隐藏表单进行POST,其中所有输入都是隐藏类型。可见表单将使用“password”类型的输入。后一种形式永远不会被提交,因此浏览器无法拦截所有登录操作。

答案 31 :(得分:-2)

使用此方法时我没有遇到任何问题:

使用autocomplete =&#34; off&#34;,添加隐藏密码字段,然后添加另一个非隐藏密码字段。浏览器尝试自动完成隐藏的浏览器,如果它不尊重自动完成=&#34;关闭&#34;

答案 32 :(得分:-2)

autocomplete =“off”适用于大多数现代浏览器,但我使用的另一种方法是与Epiphany(GNOME的WebKit驱动的浏览器)成功合作,是在会话状态(或隐藏字段,I)中存储随机生成的前缀恰好在会话状态中有一个合适的变量),并使用它来改变字段的名称。 Epiphany仍然希望保存密码,但当回到表单时,它不会填充字段。

答案 33 :(得分:-3)

我认为通过将autocomplete =“off”完全没有帮助

我有替代解决方案,

<input type="text" name="preventAutoPass" id="preventAutoPass" style="display:none" />

在密码输入之前添加此项。

例如:<input type="text" name="txtUserName" id="txtUserName" /> <input type="text" name="preventAutoPass" id="preventAutoPass" style="display:none" /> <input type="password" name="txtPass" id="txtPass" autocomplete="off" />

这不会阻止浏览器询问并保存密码。但它会阻止填写密码。

欢呼

答案 34 :(得分:-7)

IMHO,
最好的方法是随机化具有type=password的输入字段的名称。 使用前缀“pwd”,然后使用随机数。 动态创建字段并将表单呈现给用户。

您的登录表单看起来像......

<form>
   <input type=password id=pwd67584 ...>
   <input type=text id=username ...>
   <input type=submit>
</form>

然后,在服务器端,当您分析客户端发布的表单时,请使用以“pwd”开头的名称捕获字段并将其用作“密码”。