440

为政府医疗保健机构工作的乐趣之一是必须处理有关处理 PHI(受保护的健康信息)的所有偏执。不要误会我的意思,我完全赞成尽一切可能保护人们的个人信息(健康、财务、上网习惯等),但有时人们会有点过于紧张。

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

问题:网站有没有办法告诉浏览器不要记住密码?我从事 Web 开发已经有很长时间了,但不知道我以前遇到过这种情况。

任何帮助表示赞赏。

4

34 回答 34

330

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

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

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

来自https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion

一些小型研究表明这在 IE 中有效,但我不保证;)

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

jQuery 示例:

$('#loginForm').attr('autocomplete', 'off');
于 2008-08-28T14:23:22.913 回答
54

此外

autocomplete="off"

采用

readonly onfocus="this.removeAttribute('readonly');"

对于您不希望他们记住表单数据的输入(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 Chrome, Mozilla Firefox,Microsoft Edge等,并且像魅力一样工作。希望这可以帮助。

于 2016-05-18T07:03:55.713 回答
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>
于 2010-03-31T19:10:17.153 回答
30

好吧,这是一个非常古老的帖子,但我仍然会给出我的解决方案,这是我的团队长期以来一直在努力实现的。我们刚刚在表单中添加了一个新的 input type="password" 字段并将其包装在 div 中并隐藏了 div。确保这个 div 在实际密码输入之前。这对我们有用,但没有提供任何保存密码选项

Plunk - 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;}
于 2014-08-04T04:28:57.883 回答
17

您可以通过随机化用于每个节目的密码字段的名称来防止浏览器匹配表单。然后浏览器会看到与 url 相同的密码,但不能确定它是相同的密码。也许它正在控制其他东西。

更新:请注意,由于其他人指出的原因,这应该是使用自动完成或其他策略的补充,而不是替代它们。

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

于 2008-08-28T14:29:11.823 回答
14

使用真正的双因素身份验证来避免对密码的唯一依赖,密码可能存储在比用户浏览器缓存更多的地方。

于 2008-12-19T10:53:55.483 回答
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(为空)的值并尝试在那里填充任何已保存的密码,因为它始终使用type="password"在 DOM 中找到的第一个输入,位于相应的“用户名”之后输入。

于 2013-10-07T11:03:18.007 回答
12

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

  1. IE8、IE9、IE10、Firefox、Safari 运行良好。

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

  2. Chrome 和 IE 11 不支持 autocomplete="off" 功能
  3. FF 支持 autocomplete="off"。但有时会填充现有的已保存凭据。

更新于 2014 年 6 月 11 日

最后,下面是一个使用 javascript 的跨浏览器解决方案,它在所有浏览器中都可以正常工作。

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

另外,添加两个方法。一个用于验证“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();
 }
}

祝你好运!!!

于 2014-05-29T07:11:29.953 回答
8

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

然后用户将立即听从建议,在便利贴上写下密码并将其粘贴到他们的显示器上。

于 2008-08-28T14:21:19.203 回答
6

我一直在做的是使用 javascript / jQuery 结合 autocomplete="off" 和清除密码字段。

jQuery 示例:

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

通过使用setTimeout(),您可以等待浏览器完成该字段,然后再清除它,否则浏览器将始终在您清除该字段后自动完成。

于 2010-03-01T22:13:14.613 回答
3

如果 autocomplete="off" 不起作用...删除表单标记并改用 div 标记,然后使用 jquery 将表单值传递给服务器。这对我有用。

于 2014-07-04T08:59:42.533 回答
3

因为 autocomplete="off" 对密码字段不起作用,所以必须依赖 javascript。这是一个基于此处找到的答案的简单解决方案。

将属性 data-password-autocomplete="off" 添加到您的密码字段:

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

于 2017-04-04T11:46:26.880 回答
2

就像人们意识到的那样——“自动完成”属性在大多数情况下都有效,但高级用户可以使用小书签绕过它。

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

于 2011-02-07T02:29:45.927 回答
2

我有一个解决方法,这可能会有所帮助。

您可以进行自定义字体破解。因此,制作一个自定义字体,例如所有字符为点/圆/星。将此用作您网站的自定义字体。检查如何在inkscape中执行此操作:如何制作自己的字体

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

<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 字体没有损坏。希望能帮助到你?

于 2014-07-25T11:49:43.703 回答
2

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

这是一个示例(您不能在此处运行它,因为表单操作未设置为真正的登录脚本):

<!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>

于 2015-08-04T15:54:56.350 回答
2

我的 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 位)上测试。

于 2015-08-28T23:49:44.150 回答
2

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

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

它不如本机密码字段“安全”,因为选择键入的文本会将其显示为明文,但不会记住密码。它还取决于激活 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">
于 2017-04-11T18:39:14.090 回答
1

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

使用此属性的唯一缺点是它不是标准的(它适用于 IE 和 Mozilla 浏览器),并且会导致 XHTML 验证失败。我认为这是一个打破验证是合理的情况。 来源

所以我不得不说,虽然它不能 100% 全面工作,但它是在主要浏览器中处理的,所以它是一个很好的解决方案。

于 2008-08-28T14:29:01.340 回答
1

我在上面尝试过autocomplete="off",但一切都成功了。如果您使用的是 Angular js,我的建议是使用按钮和 ng-click。

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

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

感谢您的问题和答案。

于 2017-03-21T14:15:56.867 回答
1

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

<style type="text/css">
         #login_parola {
             font-family: 'passwordsecretregular' !important;
            -webkit-text-security: disc !important;
            font-size: 22px !important;
         }
    </style>


<input type="text" class="w205 has-keyboard-alpha"  name="login_parola" id="login_parola" onkeyup="checkCapsWarning(event)"  
   onfocus="checkCapsWarning(event)" onblur="removeCapsWarning()" onpaste="return false;" maxlength="32"/>
于 2020-11-17T09:00:35.923 回答
0

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

这样做的主要问题是该解决方案与 JavaScript 相关联。

再说一次,如果它可以绑定到 JavaScript,那么您最好在向服务器发送请求之前在客户端对密码进行哈希处理。

于 2008-08-28T14:23:48.247 回答
0

真正的问题远不止在 HTML 中添加属性——这是常见的安全问题,这就是为什么人们发明了硬件密钥和其他疯狂的安全措施。

想象一下,您的 autocomplete="off" 在所有浏览器中都能完美运行。这对安全有帮助吗?当然不。用户将在教科书上、贴在显示器上的贴纸上写下他们的密码,每个办公室访问者都可以看到它们,并将它们保存到桌面上的文本文件中等等。

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

因此,要么您对硬件密钥有一些疯狂的安全策略(例如,一些银行提供基本上采用双因素身份验证的网上银行服务),要么基本上没有安全性。好吧,这当然有点过分夸大了。了解您要防范的内容很重要:

  1. 未授权访问。最简单的登录表单基本上就足够了。有时会采取其他措施,例如随机安全问题、验证码、密码强化等。
  2. 凭证嗅探。如果人们从公共 Wi-Fi 热点等访问您的 Web 应用程序,HTTPS 是必须的。提到即使有 HTTPS,您的用户也需要定期更改密码。
  3. 内线攻击。有两个这样的例子,从简单地从浏览器窃取密码或你在桌子上某处写下的密码(不需要任何 IT 技能)开始,到会话伪造和拦截本地网络流量(甚至加密)结束并进一步访问 Web 应用程序,就像它是另一个最终用户一样。

在这篇特定的帖子中,我可以看到对开发人员提出的不充分的要求,由于问题的性质——最终用户安全,他永远无法解决。我的主观观点是,老实说,开发人员基本上应该说“不”并指出需求问题,而不是在这些任务上浪费时间。这并不能绝对让您的系统更安全,而是会导致显示器上贴有贴纸的情况。不幸的是,有些老板只听到他们想听到的。但是,如果我是您,我会尝试解释实际问题的出处,并且 autocomplete="off" 不会解决它,除非它会迫使用户将所有密码完全保留在他们的脑海中!开发者本身无法完全保护用户,

于 2014-06-26T10:40:34.943 回答
0

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

  1. 创建一个隐藏密码字段,字段名称为数组。

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

    <input type="password" name="password[]" />
    

浏览器 (Chrome) 可能会提示您“保存密码”,但无论用户是否选择保存,下次登录密码时都会自动填充隐藏的密码字段,即数组中的零位,第一个位留空。

我尝试定义数组,例如“password[part2]”,但它仍然记得。我认为如果它是一个未索引的数组,它就会把它扔掉,因为它别无选择,只能把它放在第一个位置。

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

echo $_POST['password'][1];
于 2016-03-17T23:42:38.747 回答
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

单击菜单中的“添加条目”,然后滚动到页面底部的“模块:停止密码管理器”。

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

于 2018-03-05T15:35:56.753 回答
-1

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

该网站通过使用 告诉浏览器这是一个密码<input type="password">。所以如果你必须从网站的角度来做这件事,那么你就必须改变它。(显然我不推荐这个)。

最好的解决方案是让用户配置他们的浏览器,这样它就不会记住密码。

于 2008-08-28T14:23:41.197 回答
-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>
于 2012-06-01T15:56:37.550 回答
-1

autocomplete="off" 不适用于禁用 Firefox 31 中的密码管理器,并且很可能在某些早期版本中也不起作用。

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

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

于 2014-08-08T08:03:40.310 回答
-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

于 2015-07-27T13:58:22.233 回答
-2

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

于 2011-04-15T12:41:15.707 回答
-2

我使用这种方法没有任何问题:

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

于 2012-04-24T20:30:03.553 回答
-2

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

于 2013-02-06T16:03:25.747 回答
-2

由于 Internet Explorer 11 不再支持autocomplete="off"字段input type="password"(希望没有其他浏览器会效仿),最简洁的方法(在撰写本文时)似乎是让用户在不同的页面中提交他们的用户名和密码,即用户输入他们的用户名,提交,然后输入他们的密码并提交。美国银行汇丰银行网站也在使用这个。

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

更新:正如Gregory在此评论中提到的,Firefox 将跟随 IE11 的领导并忽略密码字段。autocomplete="off"

于 2014-03-06T04:31:59.697 回答
-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" />

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

欢呼

于 2014-01-07T10:09:12.513 回答
-7

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

您的登录表单将如下所示...

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

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

于 2012-06-21T15:47:54.467 回答