一个快乐的工作对于政府医疗卫生机构是具有处理所有的偏执周围的处理披(保护健康信息)。不要误会我,我所做的一切可能来保护人民的个人信息(健康、财政、冲浪的生活习惯,等等), 但有时候人们获得有点太神经兮兮的。

情况:我们的一个国家的客户,最近发现的浏览器提供了方便的功能,以拯救你的密码。我们都知道,已经有一段时间,是完全可选的和最终用户决定是否这是一个明智的决定,使用或没有。然而,有一点的一片哗然的时刻,我们被要求找到一种方法来禁止这一功能对于我们的网站。

的问题:有没有一种方法,为网站告诉浏览器不提供给记得密码?我已经在网的发展有很长一段时间,但不知道,我已经遇到过。

任何帮助表示赞赏。

有帮助吗?

解决方案

我不确定如果它会工作在所有的浏览器,但是你应该试试设置自动完成="关闭"的形式。

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

最简单和最简单的方法禁用的形式 和密码存储的提示 和防止形式数据存储在会议的历史是使用自动形成元素的属性与价值"关闭"。

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

一些轻微的研究表明,这种工作在即到但我会留下没有保障;)

@约瑟夫:如果这是一个严格的要求通过XHTML验证的实际的标记(不知道为什么它会虽然)理论上可以添加这种属性有javascript之后,但随后用户与js禁(可能忽略的数额的用户群或零如果你的网站需要js)仍将有自己的密码保存。

例字:

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

其他提示

我已经在努力与这个问题一时,与一个独特的转折的问题。特权用户没有密码保存工作对于他们,但普通用户的需要。这意味着特许用户登录两次,第二次执行没有保存密码。

这一要求,标准 autocomplete="off" 方法不会的工作在所有浏览器,因为密码可能已从第一个登录。一个同事发现了一个解决方案的替换密码场时,它的重点是与一个新的密码领域,然后侧重新密码领域(然后挂钩的同一事件的处理程序).这个工作(除了它所引起的一个无限循环在IE6).也许有一种方法,但它是使我有偏头痛。

最后,我想只要有用户名和密码以外的形式。我惊讶的是,这样工作!它的工作IE6,和目前版本的火狐和铬在Linux。我没有测试过它进一步,但我怀疑它的工作原理在大多数如果不是所有的浏览器(但是我不会吃惊,如果有一浏览器,那里不在乎如果没有的形式)。

这里是一样的代码,以及一些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>

只是使用

只读onfocus="这个。removeAttribute('只读');"

除了

自动完成="关闭"

输入(s)是你不想记得的形式的数据(username, password, 等)。 如下所示:

<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, 等等。就像一个特色。希望这可以帮助...

嗯,其一个非常古老的职位,但我仍会给我的解决方案,这是我的团队已经在努力实现长久。我们只是增加了一个新的input type="password"领域内的形式和包裹在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;}

你可以防止浏览器匹配的形式,由随机化的名称中使用的密码场上的每一个展示。然后浏览器看到了密码相同的网址,但不能肯定它是 同一密码.也许这是控制别的东西。

更新: 注意,这应该是 除了 使用自动完成或其他手段,不能代替他们的理由表示的其他人。

还注意到,这只会阻止的浏览器 自完成 密码。它不会阻止它 储存 密码在任何级别的任意安全浏览器的选择来使用。

使用真实的 两个因素的认证 为了避免的唯一依赖于密码这可能是存在许多更多的地方比的用户浏览器高速缓存。

最清洁的办法是使用 autocomplete="off" 标记属性,但 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后各自的"username"的输入。

我已经测试,增加自动完成="关闭"标签的形式在所有主要的浏览器。事实上,大多数各国人民在我们使用IE8为止。

  1. IE8,IE9,10,火狐,Safari是工作的罚款。

    浏览器不要求"保存密码"。此外,以前保存用户名和密码,未填充。

  2. 铬&即11不支持自动完成="关闭"功能
  3. FF支持的自动完成="关闭"。但有时现有的救 凭据的是填充。

更新月11 2014年

最后,以下是一个跨浏览器中的溶液使用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();
 }
}

祝你好运!

不是真的-唯一你可以现实地做的是提供咨询意见网站;也许,在他们的第一时间签署在,你可以告诉他们的一种形式的信息表示它不建议他们让浏览器保存的密码。

然后用户,将立即按照咨询意见,写下密码后它注意到并带给他们的监视器。

什么我一直在做的是结合自动完成="关闭",并清除密码领域使用javascript/!

jQuery例如:

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

通过使用 setTimeout() 你可以等待浏览器来完成的领域之前清除它,否则浏览器将总是自动完成后,你已经清楚的领域。

如果自动完成="关闭"不工作...删除形式的标签和使用div标签,然后通过的形式值使用jquery的服务器。这为我工作。

因为自动完成="关闭"不起作用的密码领域,一个必须依靠javascript。这里有一个简单的解决方案的基础上,答案在这里找到。

添加的属性数据-密码-自动完成="关闭"到你的密码领域:

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

这个方案适用于镀铬和FF.

只是让人们意识到-的"自动完成"属性的工作大部分时间,但是电力的用户可以绕过它使用一个书签.

具有浏览器保存密码实际上增加了保护,反对按键记录,所以可能是最安全的选择是保存密码在浏览器,但保护他们掌握密码(至少在火狐).

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

你可以做一个自定义的字体丐。因此,使一个定义的字体,与所有角色作为一个点/圈/星的例子。使用这一定义的字体为你的网站。检查如何做到这一点(: 如何让自己的字体

然后在你登录的形式使用:

<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,野生动物园和铬。只是确保oet字,转换不会损坏。希望它能帮助?

马库斯提出的一个伟大的点。我决定要看的 autocomplete 属性和得到了以下:

唯一的缺点使用这个 属性,它不是标准 (它可以在即和Opera浏览器), 并会导致XHTML验证 失败。我认为这是一个情况下 这是合理的休息验证 然而。 (来源)

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

最简单的方法来解决这个问题是地方输入的领域以外的形式标签和增加两个隐藏的领域内的形式标签。然后在提交事件的听众面前的形式的数据被提交给服务器复制的价值观从中可见输入到看不见的。

这里有一个例子(你不能运行它在这里,因为形式的行动是不设置为一个真正的登陆脚本):

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

我js(jquery)的解决方法是 改变密码输入型以文字形式提交.密码可能成为可见的一秒钟,所以我也隐藏的输入,只是在这之前。 我宁愿不利用这一登录的形式, 但它是有用的(一起与"自动完成"="关闭")例如内部管理的一部分网站。

尝试把这个内部控制台(字)之前,提交形式。

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

测试的铬44.0.2403.157(64位)。

我试过的上述 autocomplete="off" 但任何成功的。如果您使用的角js我的建议是去按钮和ng击。

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

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

感谢您的问题和答案。

我测试了很多解决方案。动态的密码领域的名称,多个密码领域(无形假的),改变输入型从"案文"到"密码",自动完成="关闭",自动完成="新密码",...但什么都没有解决它与最近浏览器。

摆脱密码记得,我最后处理的密码输入域,和"模糊"的案文类型。

这是低"安全"的比地密码领域,因为选择类型的文本将表明它作为明确的文本,但是密码是不记得。它还取决于具有Javascript激活。

你将有估计的风险,使用以下的建议vs密码记得选项,从航海家。

虽然密码记得可以管理(disbaled每个站点)由用户,它的罚款用于个人计算机,不"公开"或分享计算机。

我我的情况下,它是用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">

一个我知道的是使用(例如)JavaScript复制的价值的密码领域之前提交的形式。

主要的问题是,该解决方案是绑JavaScript。

然后再次,如果可以绑JavaScript你可能会以及哈希上的密码客户端之前发送请求到服务器。

真正的问题是更深刻的不仅仅是添加的属性HTML-这是共同的安全关切,这就是为什么人们发明了硬件键和其他疯狂的事情为安全。

想象一下,你已经自动完成="关闭"完美的工作在所有的浏览器。这将帮助安全?当然,没有。用户将会写下他们的密码在教科书中,上贴他们的监视器在哪里的每一个办事处的游客可以看到他们,保存他们的文本的桌面上的文件等等。

一般来说,网络应用程序和网络开发员不负责任的方式为终端用户的安全。终端用户可以保护自己只。理想的情况是,他们必须保持所有的密码放在他们头上,并用密码重置功能(或接触管理员)的情况下,他们忘了它。否则总是会有风险,密码可以被看见并被盗。

所以要么你有一些疯狂的安全政策与键硬件(如,一些银行提供因特网银行业务基本上采用了两个因素的认证),或者没有安全基本上是这样。嗯,这是有点夸张的课程。重要的是要了解什么是你想要保护反对:

  1. 未经授权的访问。最简单的登录的形式是不够的。有时候而采取的额外措施就像是随机的安全问题,验证码,密码硬化等。
  2. 凭证嗅探。HTTPS是必须的,如果人访问网应用程序从公共无线网络连接点等。说甚至具有HTTPS,你的用户需要改变自己的密码。
  3. 内部攻击。有两种例子很多这样的,从简单的偷你的密码从浏览器或那些你已经写下来的地方上台(不需要任何技术技能)和结束会议锻和拦截当地网络业务(即使是加密的),并进一步访问网应用程序,就像它是另一种终端用户。

在这个特别的岗位,我可以看到的不足要求把对开发,他将永远无法解决由于性质的问题最终用户的安全。我的观点是,开发人员应该基本上说没有和点上需求的问题,而不是把时间浪费在这种任务,诚实。这并不绝对让你的系统更加安全,这将导致数情况下,贴上的监视器。不幸的是,一些老板们只听到什么他们想要听到的。然而,如果我是你,我会尝试解释那里的实际问题是从,并自动完成="断"不会解决它,除非它将力量用户保持他们所有的密码只在他们的头!开发人员对他的结束不能保护用户完全用户需要知道如何使用系统而同时不让他们的敏感安全信息,并且这远远超出认证。

面临着同样的HIPAA问题,并发现了一个相对较简单的解决方案,

  1. 创建一个隐藏的密码领域的域名作为一个阵列。

    <input type="password" name="password[]" style="display:none" />
    
  2. 使用同一阵列的实际密码领域。

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

浏览器(铬)可提示你"保存密码",但无论如何,如果用户选择的保存,下一次他们登录密码会自动填充的隐密码领域,零老虎的阵列,而使第1隙空白。

我试图定义阵列,诸如"password[第2部分]",但它仍然记得。我认为它会引发它关闭,如果它是一个未编制索引的阵列,因为它没有选择,只能放在第一位。

然后你用你的编程语言的选择访问的阵列,PHP例如,

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

由于大多数 autocomplete 建议,包括接受的答案,不工作,在当今的网络浏览器(即网络浏览器的密码管理人员忽略 autocomplete),更新颖的解决办法是交换之间 passwordtext 类型和使背景的颜色匹配的文字颜色的领域是一个普通的文本的领域,其继续隐藏的密码,同时作为一个真正的密码领域,当用户(或程序等诺)是在进入一个密码。浏览器不要求保存密码存储在纯文本的领域。

这种方法的优点是,它允许逐渐增强,因此不需要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

点击"加入"在菜单上然后滚动到底页"模块:停止的密码管理者"。

免责声明:虽然这种方法作为短视的个人,可能会有问题的屏幕阅读器软件。例如,一个屏幕阅读器可读的用户密码的出声来,因为它认为一个普通的文本的领域。还可能有其他不可预见的后果使用上述插件。改变建立在网浏览器的功能,应做到谨慎测试各种各样的条件和边缘案例。

有没有一种方法,为网站告诉浏览器不提供给记得密码?

该网站告诉浏览器这是一个密码通过使用 <input type="password">.所以如果你 必须 做到这一点从一个网站的透然后你会改变这种状况。(显然我不建议这样做).

最好的解决方案将是有用户配置他们的浏览器,所以它不会记得密码。

如果你不想相信的自动完成的标志,可以确保用户类型的框使用的菜单选择变化的事件。代码下面是一个简单HTML形式。隐形式件password_edited启动了设为0。当值的密码被改变,JavaScript在顶部(pw_edited的功能)的变化的价值为1。当按钮被按下时,它检查valueenter代码这里之前提交的形式。这样,即使浏览器将忽略你和自动完成的领域,用户不能通过登录网页没有输入密码领域。此外,还要确保空白密码领域时,重点是设定。否则的话,可以添加一个字结束时,然后返回并移除它欺骗的系统。我建议添加"自动完成"="关闭"密码在外,但这个例子显示了备份代码的工作。

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

自动完成="关闭"不适用于禁用密码管理Firefox31和最有可能不是在一些较早的版本。

结帐的讨论mozilla关于这个问题:https://bugzilla.mozilla.org/show_bug.cgi?id=956906

我们希望利用第二个密码场进入的一个一次性密码产生的一个标记。现在,我们正使用一个文本输入,而不是一个密码输入。:-(

我得到一个类似的任务,以禁用自动填写的登录名称和密码通过浏览器,之后,大量的试验和错误,我发现了以下解决方案是最佳的。只是添加以下的控制之前你原来的控制。

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

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

这是工作的现为internet explorer11和铬44.0.2403.107

自动完成="关闭"适用于大多数现代浏览器,但是另一种方法,我用的工作成功与主显节(a其驱动浏览器为侏儒)是储存一个随机产生的前缀在会议的国家(或一个隐藏的领域,我碰巧有一个适当的变量在会议的国家已),以及使用此改变名称的领域。顿悟仍然想要保存密码,但是,当回的形式,它不会填充的领域。

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

使用自动完成="关闭",加入一个密码隐藏场,然后另一个非隐藏的一个。浏览器尝试自动完成的隐藏的一个如果不尊重自动完成="关闭"

另一个解决办法是使后使用的一个隐藏的形式,所有的输入型隐藏。可见的形式将使用输入的种类"密码"。后者形式将永远不会被提交的,因此浏览器就不能拦截至所有的操作登录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top