【问题标题】:Is there any way to get value of an auto-filled password box in JavaScript?有没有办法在 JavaScript 中获取自动填充密码框的值?
【发布时间】:2018-06-26 17:47:23
【问题描述】:
var inputs = document.getElementsByTagName('input');
for (var i = 0; i < inputs.length; i++) {
    inputs[i].onfocus = foo;
}
function foo(){
    alert(this.value);
}

手动输入输入值时:
无论输入字段的类型如何,上面的代码都能正常工作并提醒正确的值。

当浏览器自动填充输入值时:
当输入字段为文本类型时,代码会起作用并提醒正确的值。如果是密码字段,它会提示空字符串!

这种行为是因为浏览器的安全策略吗?或者有什么可能的解决方法?我在 Chrome 浏览器中试了一下。

【问题讨论】:

  • 请澄清:您是否在访问已由您提供的页面预填充的“值”属性时遇到问题,或者您是否在谈论 Chrome 如何使用其密码管理器预填充输入?如果是后者,请看我的回答。
  • 如果“值”属性已预先填充,则没有问题。问题是当浏览器使用其密码管理器自动填充输入框时(当您说保存此站点的密码时)。在这种情况下,如果浏览器没有向 DOM 元素插入 value 属性,那么它本质上是做什么的呢?谢谢你捷克的回答,看来我没有办法解决这个问题!

标签: javascript jquery browser-security


【解决方案1】:
$(document).ready(function() {
  $("input")
      .blur(password)
      .trigger('blur');
});

function password() {
   alert($(this).val())
}

DEMO

【讨论】:

  • 这里不需要 jQuery:jsfiddle.net/7hn3ojcw/3 我认为 @CzechErface 无论如何都在赚钱。我认为访问用户填充的输入(如您的示例)不是问题,而是浏览器预先填充的输入。
  • @ste2425 实际上它也适用于预填充的密码字段,刚刚使用 Chrome 默认密码填充和 lastpass 扩展进行了测试,两个输入值都很容易访问。
  • @ArturasTamulatis 是原生还是 jQuery?无论哪种方式,我都会收回我的评论,我会对其进行编辑,但已经超过 5 分钟。
  • @ste2425 用本机测试:)
【解决方案2】:

这是一个有趣的问题,因为我相信您指的是 Chrome 中安全功能的副作用。

Chrome(可能还有其他浏览器)实际上可能不会使用自动填充的密码填充 DOM,因为恶意程序员可能会编写一个 JavaScript,在页面加载后试图从毫无戒心的受害者那里窃取自动填充的密码。

您很可能会要求用户单击提交按钮,然后您才能访问该信息。

您可以强制表单提交并在提交实际发生之前检查值。如果可行,那么您可以通过在“onsubmit”中返回 false 来取消提交,并且您现在有了密码。

【讨论】:

  • 使用JS提交表单也不是安全问题?
  • 我试图复制 Akhil Dixit 所经历的行为,但无济于事。我可以使用 jQuery 和纯 JavaScript 从 DOM 读取自动填充的密码。我只是试图为我们的两个浏览器之间的不一致提供一个可能的原因(我也使用 Chrome)。
猜你喜欢
  • 2016-05-05
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 2011-10-24
  • 2019-12-13
  • 2021-08-03
相关资源
最近更新 更多