如何防止浏览器存储密码

Sre*_*ree 47 html browser security gxt

我需要阻止浏览器存储用户名和密码值,因为我正在处理包含更多安全数据的Web应用程序.我的客户要我这样做.

autocomplete="off"在HTML表单和密码字段中尝试了该属性.但它不适用于Chrome 55,Firefox 38 +,IE 11等最新浏览器.

什么是最好的解决方案?

Sre*_*ree 37

谢谢你回复我.我按照以下链接

禁用浏览器"保存密码"功能

我解决了这个问题,只需在输入中添加readonly&onfocus="this.removeAttribute('readonly');"属性autocomplete="off",如下所示.

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

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

这对我来说很好.

  • 试过这个,也不起作用 esp firefox dev edition (2认同)

4ca*_*tle 32

这在现代浏览器中是不可能的,并且有充分的理由.现代浏览器提供密码管理器,使用户能够使用比通常更强的密码.

正如MDN所解释的:如何关闭表单自动完成:

现代浏览器实现集成的密码管理:当用户输入站点的用户名和密码时,浏览器会为用户记住它.当用户再次访问该站点时,浏览器会使用存储的值自动填充登录字段.

此外,浏览器允许用户选择浏览器将用于加密存储的登录详细信息的主密码.

即使没有主密码,浏览器内的密码管理通常被视为安全性的净收益.由于用户不必记住浏览器为其存储的密码,因此他们可以选择比其他方式更强的密码.

因此,许多现代浏览器不支持autocomplete="off"登录字段:

  • 如果网站autocomplete="off"为表单设置,并且表单包含用户名和密码输入字段,则浏览器仍然会提供记住此登录的信息,如果用户同意,浏览器将在下次用户访问该页面时自动填充这些字段.

  • 如果网站设置autocomplete="off"了用户名和密码输入字段,则浏览器仍然会提供记住此登录信息,如果用户同意,浏览器将在下次用户访问该页面时自动填充这些字段.

这是Firefox(自版本38以来),Google Chrome(自34版本)和Internet Explorer(自版本11以来)以来的行为.

如果作者想要阻止用户管理页面中的密码字段的自动填充,用户可以为其他人指定新密码,则autocomplete="new-password"应该指定,但是尚未在所有浏览器中实现对此的支持.

  • 在密码管理器没有意义的用例中.比如更改密码.autocomplete ="new-password"对我不起作用,如Firefox 55.0.3 x64 (5认同)
  • 当您开发支持设置密码字段的管理界面时,强制执行这是否是一件好事的语义完全没有意义!您认为强制浏览器让管理员保存他们在浏览器中创建的每个用户的每个密码更安全吗?!每当我读到“净收益”的评论时,我的内心都会有点崩溃。 (5认同)
  • 在Chrome 65中,`autocomplete ="new-password"`与我想要的完全相反.它没有显示"你想更新你保存的密码......"对话框......它只是默默地更新我存储的密码.比无用更糟糕 - 危险!> :( (4认同)
  • 如此,在浏览器中显示密码非常容易。只需打开开发人员工具,将输入类型从密码更改为文本,然后瞧瞧!在那里。 (2认同)

小智 15

我通过添加autocomplete="one-time-code"密码输入解决了这个问题。

根据HTML 参考 autocomplete="one-time-code"- 用于验证用户身份的一次性代码。它看起来最适合这个。

  • 奇怪的是,mdn 建议 [`new-password`](https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion#preventing_autofilling_with_autocompletenew-password),但在 FF 中对我来说都不起作用。 (3认同)

Sim*_*ggs 13

您应该能够制作一个假的隐藏密码框来防止它。

<form>
  <div style="display:none">
    <input type="password" tabindex="-1"/>
  </div>
  <input type="text" name="username" placeholder="username"/>
  <input type="password" name="password" placeholder="password"/>
</form>
Run Code Online (Sandbox Code Playgroud)

  • 在浏览器 firefox 84.0b5(64 位)版本中它不起作用。 (2认同)

Nat*_*o90 8

这是针对Chrome的纯HTML / CSS解决方案,已在65.0.3325.162版(正式版本)(64位)中进行了测试

设置输入type="text"并使用CSS text-security:disc进行模仿type="password"

<input type="text" name="username">
<input type="text" name="password" style="text-security:disc; -webkit-text-security:disc;">
Run Code Online (Sandbox Code Playgroud)
  • 注意:可在FireFox中使用,CSS moz-text-security已过时/已删除。要解决此问题,请创建仅由点组成的CSS font-face并使用font-family: 'dotsfont';

    来源: 获取输入type = text看起来像type = password

    上面的源代码包含指向CSS moz-text-security-webkit-text-security属性的变通办法的链接。

    资料来源:https : //github.com/kylewelsby/dotsfont

    据我测试,此解决方案适用于ChromeFireFox 59.0版本(64位)IE版本11.0.9600以及IE仿真器ie5及更高版本。

  • 这可能是一个坏主意,因为密码字段有一些额外的安全属性——例如不能复制粘贴其中的文本。 (4认同)
  • 复制/粘贴不应被视为密码字段中的问题,因为这是密码管理器的理论基础。问特洛伊亨特。 (3认同)

小智 7

默认情况下,没有任何正确的答案可以禁用在浏览器中保存密码。但幸运的是,有一种解决方法,它几乎适用于所有浏览器。

为了实现这一点,在实际输入之前添加一个虚拟输入,使用 autocomplete="off" 和一些自定义样式来隐藏它并提供 tabIndex。

某些浏览器 (Chrome) 的自动完成功能会填写它找到的第一个密码输入,以及之前的输入,因此使用此技巧,它只会填写无关紧要的不可见输入。

          <div className="password-input">
            <input
              type="password"
              id="prevent_autofill"
              autoComplete="off"
              style={{
                opacity: '0',
                position: 'absolute',
                height: '0',
                width: '0',
                padding: '0',
                margin: '0'
              }}
              tabIndex="-2"
            />
            <input
              type="password"
              autoComplete="off"
              className="password-input-box"
              placeholder="Password"
              onChange={e => this.handleChange(e, 'password')}
            />
          </div>
Run Code Online (Sandbox Code Playgroud)