输入类型=密码,不要让浏览器记住密码


Answers:


123

尝试使用autocomplete="off"。不过,不确定是否每个浏览器都支持它。MSDN文档在这里

编辑:注意:大多数浏览器已放弃对此属性的支持。请参阅autocomplete =“ off”与所有现代浏览器兼容吗?

可以说,这应该由用户而不是网站设计者来决定。


2
您还可以使用HTTPS以及通过HTTP标头或META标记提供的页面来阻止缓存。这样,密码也不会被存储(至少在Internet Explorer中)。
doekman'4

关于验证,HTML5向规范添加了自动完成属性,因此现在还不错
VictorySaber 2014年

9
未来读者注意:所有主流浏览器都在朝着忽略该属性的方向发展。(见stackoverflow.com/a/21348793/37706
rdans

@RyanDansie感谢您指出这一点。我已经更新了答案。旧答案很旧。
tvanfosson

8
“可以说,这应该留给用户,而不是网站设计者。” 既有技术原因又有非技术原因。例如,不应该记住一次性密码。另一个带有“输入PIN的第一位数字”的银行网站。不要忘记,业务分析师可能会决定他想要一个密码字段,然后从开发人员中删除选择。
Sprague

61

<input type="password" autocomplete="off" />

我想补充一点,作为用户,我认为这烦人并且需要克服。我强烈建议您不要使用此功能,因为它很可能会加重您的用户。

密码尚未存储在MRU中,并且正确配置的公用计算机甚至都不会保存用户名。


23
+1表示“不要惹恼您的用户”。这正是这种功能所要做的。就像强制关闭缓存的站点一样,后退按钮可以清除表单。极具刺激性。
cletus

6
+1我完全同意。适用于管理员编辑客户资料页面,仅在您要更改密码时输入密码。这样,管理员不必每次去编辑客户信息时都更改密码。
DavGarcia

14
这对于信用卡号字段非常有用。PayPal的表格存储在每个浏览器中,使用计算机的任何人都可以重新输入所有数据,因此您必须手动删除所有已记住的字段。
Egor Pavlikhin

31
在用户可以设置与登录无关的密码的表单上,启用自动完成实际上是比较烦人的选择-浏览器可能会提供保存实际上无法执行任何操作的密码。另外,如果安全性是一个敏感的问题,我不会假设所有公共计算机都已正确配置。
jrb

3
我一次使用此密码。正如jrb所说,如果浏览器存储它会很烦人。
Danation

12

我用另一种方式解决了。你可以试试看

<input id="passfld" type="text" autocomplete="off" />
<script type="text/javascript">
// Using jQuery
$(function(){                                               
    setTimeout(function(){
        $("input#passfld").attr("type","password");
    },10);
});


// or in pure javascript
 window.onload=function(){                                              
    setTimeout(function(){  
        document.getElementById('passfld').type = 'password';
    },10);
  }   
</script>

#其他方式

 <script type="text/javascript">    
 function setAutoCompleteOFF(tm){
    if(typeof tm =="undefined"){tm=10;}
    try{
    var inputs=$(".auto-complete-off,input[autocomplete=off]"); 
    setTimeout(function(){
        inputs.each(function(){     
            var old_value=$(this).attr("value");            
            var thisobj=$(this);            
            setTimeout(function(){  
                thisobj.removeClass("auto-complete-off").addClass("auto-complete-off-processed");
                thisobj.val(old_value);
            },tm);
         });
     },tm); 
    }catch(e){}
  }
 $(function(){                                              
        setAutoCompleteOFF();
    });
</script>

//您需要添加属性autocomplete =“ off”或将类.auto-complete-off添加到输入框中并享受

例:

  <input id="passfld" type="password" autocomplete="off" />
    OR
  <input id="passfld" class="auto-complete-off" type="password"  />

4
这样可以防止浏览器存储密码,而不是阻止自动完成,这在我的情况下是更好的解决方案。
保罗·弗拉克(PauFracés)2015年

谢谢,为我准备了最新版的chrome,请注意:在仅允许使用Chrome的内部系统上使用,如果在生产现场使用,请进行更多测试。
Izion

@AntoVinish,我希望在Firefox 40我最后的解决方案的工作
萨瓦尔·哈桑

7

我尝试了以下操作,并且似乎适用于任何浏览器:

<input id="passfld" type="text" autocomplete="off" />

<script type="text/javascript">
    $(function(){  
        var passElem = $("input#passfld");
        passElem.focus(function() { 
            passElem.prop("type", "password");                                             
        });
    });
</script>

这种方法比使用超时技术安全得多,因为它可以确保输入字段在用户集中输入时会屈服于密码。


5

关于安全性问题,以下是安全顾问将在整个现场问题上告诉您的内容(这来自实际的独立安全性审计):

启用HTML自动完成功能– HTML表单中的密码字段已启用自动完成功能。大多数浏览器都具有记住输入HTML表单的用户凭据的功能。

相对风险:低

受影响的系统/设备:o https:// * ** * *** /

我也同意这应该涵盖任何包含真正私有数据的字段。我认为,只要该站点要访问应被安全保护的任何东西(普遍或法律合规要求),就可以强迫人们始终键入其信用卡信息,CVC代码,密码,用户名等。例如:购买表格,银行/信贷网站,税收网站,医疗数据,联邦,核电等- 而非 Stack Overflow或Facebook之类的网站。

其他类型的网站-例如用于上班和下班的TimeStar Online-这很愚蠢,因为我在工作中始终使用相同的PC /帐户,因此我无法在该网站上保存凭据-奇怪的是,我可以在Android上但不适用于iPad。即使是共享PC,这也不会太糟,因为为其他人输入/输出时钟实际上并不会做任何事情,只会惹恼您的主管。(他们必须删除错误的拳头-只是选择不保存在公用PC上)。


5
只是在这里添加注释为你的理由希望保存密码。我维护一个带有用户帐户的网站,管理员可以在其中更改用户密码。目前,客户很生气,因为Chrome 每次都会为每个用户保存在“更改密码”表单上输入的密码,因为它会误认为编辑用户表单为登录表单。显然,提供诸如“仅单击永不记住密码”之类的简单说明即可。
charredUtensil 2014年

5
<input type="password" placeholder="Enter New Password" autocomplete="new-password">

干得好。


2
就是这样,有很多解决方法,就这么简单,并用最新版本的Firefox(v67)和Chrome(75)进行了测试。
马里亚诺·鲁伊斯

提交表单后,Chrome 80仍然会提供记住密码的功能。
布克

4

这是最好的答案,也是最简单的!在该字段的前面放置一个额外的密码字段input并设置display:none,以便浏览器填写该密码时,它会以input您不需要关心的方式进行操作。

更改此:

<input type="password" name="password" size="25" class="input" id="password" value="">

对此:

<input type="password" style="display:none;">
<input type="password" name="password" size="25" class="input" id="password" value="">

实际上,如果表单中包含2个密码字段,则可以使用,但是如果新浏览器不可见并启用,则新浏览器将忽略第二个密码;(
Cedric Simon

1
使用display:none不适用于我(Chrome 61 OSX),但确实可以:<input type="password" style="position: absolute; top: -1000px;">
John Hascall

2

在他正在使用这个可在任何地方使用的简单解决方案的地方,也请阅读以下答案(另请参阅Safari移动版修复程序):

<input type="password" readonly onfocus="this.removeAttribute('readonly');"/>

1

您可以使用JQuery,通过ID选择项目:

$("input#Password").attr("autocomplete","off");

或按类型选择项目:

$("input[type='password']").attr("autocomplete","off");

或者:

您可以使用纯Javascript:

document.getElementById('Password').autocomplete = 'off';


1

鉴于不建议使用autocomplete = off,我建议使用更新的解决方案。

将您的密码字段设置为普通文本字段,并使用CSS使用“ discs”屏蔽您的输入。代码应如下所示:

<input type="text" class="myPassword" /> 

input .myPassword{
    text-security:disc;
    -webkit-text-security:disc;
    -mox-text-security:disc;
}

请注意,这可能不适用于Firefox浏览器,并且需要其他解决方法。在此处了解更多信息:https : //stackoverflow.com/a/49304708/5477548

解决方案是从此链接中获取的,但是为了符合SO“无热链接”的要求,我在此处进行了总结。


0

对于大多数主要的浏览器,输入在任何形式之外且未连接到任何形式都会使浏览器认为没有提交。在这种情况下,您将必须使用纯JS验证进行登录,并且还必须对密码进行加密。

之前:

<form action="..."><input type="password"/></form>

后:

<input type="password"/>

1
顺便说一句,这可能是您不应该使用的技巧。通过不使用表单标签,默认情况下,您的代码将变为HTML4,从而使验证用户帐户更加困难。
Cannicide

0

我发现以下可在Firefox和Chrome上使用的作品。

<form ... > <!-- more stuff -->
<input name="person" type="text" size=30 value="">
<input name="mypswd" type="password" size=6 value="" autocomplete="off">
<input name="userid" type="text" value="security" style="display:none">
<input name="passwd" type="password" value="faker" style="display:none">
<!-- more stuff --> </form>

所有这些都在表格部分中。“ person”和“ mypswd”是您想要的,但是浏览器将一次保存“ userid”和“ passwd”,再也不会保存,因为它们不会更改。如果您确实不需要,可以取消“人员”字段。在这种情况下,您只需要“ mypswd”字段,该字段可能会以网页用户已知的某种方式发生变化。


0

我可以使Firefox,Edge和Internet Explorer关闭自动完成功能的唯一方法是在我的表单语句中添加autocomplete =“ false”,例如:

  <form action="postingpage.php" autocomplete="false" method="post">

并且我必须在表单输入中添加autocomplete =“ off”并将类型更改为文本,例如:

     <input type="text" autocomplete="off">

似乎该html代码需要与浏览器进行标准化。应当修改表单类型=密码,使其覆盖浏览器设置。我唯一的问题是我失去了输入掩码。但是从好的方面来说,恼人的“此站点不安全”没有出现在Firefox中。

对我来说,这没什么大不了的,因为用户已经通过身份验证,并且它是我的更改用户名和密码部分


2
不要这样做。数据仍将通过网络以纯文本格式发送,这首先是HTTP(不是HTTPS)的整个问题,因此是“令人讨厌”的警告消息。用户已经通过身份验证没有区别,因为中间人仍然可以看到纯文本数据,并且服务器端日志记录的配置可能有所不同(可以存储请求标头,而如果存储了POST则完全存在其他问题) HTTPS下的数据)。
雅各布(Jacob)

https加密流量。如果您将其用作公共Internet应用程序的一部分,则无论如何都要这样做。Post方法可防止添加书签,HTML内的多个Iframe php代码可防止URL注入。从技术上讲,您应该输入完整的路径。如果要进行部署,则建议您使用以文本形式编写的基本URL加载$ _SESSION变量,而不要查看$ _SERVER变量。$ _SERVER ['HTTP_HOST']和$ _SERVER ['PHP_SELF']仅应在非公共环境中使用,因为它们都有很多利用。
drtechno

顺便说一句,我的例子是封闭的系统,它们不以任何方式连接到互联网
drtechno

没有人接触过使用通过“ java onclick”执行的加密方案,然后在加密例程之后提交表单。
drtechno
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.