javascript访问密码字段值是否被视为安全风险?

时间:2009-10-27 14:17:50

标签: javascript security

如果安全和正确地存储密码是好的风格和安全性,那么对于要求用户输入密码的网页应该不一样吗?

考虑这个例子

<script>

function copy() {
    var text = document.getElementsById('text');
    var pass = document.getElementsById('pass');

    text.value = pass.value;
}

</script>

<input type=text id=text>
<input type=password id=pass>

<button onclick="copy();">copy</button>

在密码框中键入内容并单击复制按钮,然后将其暴露给世界。但是,如果您从密码框中复制并粘贴,那么您将获得无用的数据。

考虑登录页面中包含的不受您控制的javascript片段(分析,页面流跟踪器,云中的托管脚本)。 Web浏览器是否有理由阻止这种对密码字段的编程访问,而是提供自己的密码验证API?

7 个答案:

答案 0 :(得分:8)

此漏洞是[传统实施] 应用程序级别身份验证所固有的,因此必须通过网络收集和传输登录/密码对。 (并且网络浏览器不是唯一受此威胁威胁的地方)。

javascript主机和/或http级别的一些安全措施已经到位,以防止某些您预见到的危险,但无论如何总是存在代码注入的风险...... < / p>

最重要的是,如果需要有效的安全性,您可以考虑其他身份验证方法,例如操作系统集成安全性,其他形式的基于挑战的安全性,以及基于非密码的方法(例如:类似验证码的挑战,显示一系列照片,其中一些是经过身份验证的人预先学习的。)

答案 1 :(得分:8)

  

Web浏览器是否有理由阻止对密码字段的这种编程访问,而是提供自己的密码验证API?

没有。 <input type="password">是一种便捷功能,可在您输入文字时不显示文字。它不是任何一种安全措施。

浏览器窗口内的所有内容都完全由网站控制。它可以很容易地伪造密码字段,或者在窗口中嗅探按键,以绕过密码字段.value的任何可能保护。没有办法统治这个,所以试图禁止访问密码字段是没有意义的。

这会破坏密码字段的几个非常有用的功能,例如能够让客户端脚本检查您在注册时键入了一个非平凡的密码(并警告您,例如使用相同的密码字段)密码作为您的用户名),或者在发送密码之前让基于客户端脚本的登录系统散列密码。

  

考虑登录页面中包含的不受您控制的javascript片段(分析,页面流跟踪器,云中的托管脚本)。

0,除非你完全做错了。你需要阻止它。

您在网页上添加的任何脚本都可以完全访问整个网站的脚本。隐藏在安全上下文中执行的流氓脚本的类型密码完全没有结果,因为它可以将iframe放入文档的innerHTML中,其中包含delete-account表单,然后点击提交按钮。或者记录您在网站上发布的每一个按键。

如果您在网页上包含其他人的脚本,则您实际上是在为他们提供管理员权限,因此您最好相信他们。将跟踪器或广告脚本放在对其有任何敏感性的网站上是一种病态乐观的行为。

是的,Stack Overflow包含来自google-analytics.com的脚本。是的,谷歌可以,如果他们愿意,可以在该脚本中包含代码,让每个人编辑所有答案,说“我喜欢底部大声笑”,或者让管理员删除所有内容。也许他们不会,如果他们今天心情愉快的话。你感觉幸运吗?


我喜欢屁股lol

答案 2 :(得分:2)

拥有验证API没有任何区别,因为页面中的任何恶意JavaScript都可以在您输入字段时简单地听取击键并记录密码。

网上银行网站有时会有一些有趣的密码机制,例如要求通过选择框输入密码的第2个和第7个字符(这会使其难以捕获)。

最终,Web开发人员有责任确保所有特权代码(例如文档中的JavaScript)都是安全的。安装浏览器扩展,Greasemonkey脚本或桌面应用程序时也是如此 - 您必须从受信任的来源检查它。

您可能希望使用OpenID而不是密码字段(与StackOverflow本身一样)。它不仅可以减少用户记住的密码,而且还可以将安全性委托给更专业的身份代理,希望可以实现最严格的安全性。

答案 3 :(得分:1)

  

考虑登录页面上包含的不受您控制的javascript片段数。

为什么你会让任何人把JS放在你不受你控制的登录页面上?

您可以控制登录页面上的内容,因此浏览器没有理由进行干预。

答案 4 :(得分:1)

已禁止跨域JS访问,因此登录页面域外的脚本无法访问您的密码字段。

答案 5 :(得分:1)

这是一个有趣的观点,但我觉得您的网站的安全性已经成为一个问题,那么您将不会包含任何超出您控制范围的JavaScript。

虽然我认为提供密码验证API的浏览器是一个好主意,无论你如何处理它,在某些时候,你控制之外的一些代码,javascript或其他代码,都可以访问未加密的密码文本。你在哪里划线?

答案 6 :(得分:0)

所以我们应该阻止客户端编写暴露自己密码的javascript?我在这里没有看到问题。

对于希望能够访问密码字段内容的Web开发人员,您会做些什么?它需要可以访问。

相关问题