Holding password in javascript variable - security implications?
在浏览器的 javascript 变量中保存用户密码是否会暴露任何特定的安全漏洞,超出基于浏览器的客户端通常的安全漏洞?
将此片段视为一个简单的示例 - jsfiddle here
1 2 3 4 5 6 7 8 9 10 11 12 13 | <label for="password">Password</label> <input type="password" id="password"/><br/><br/> <button type="button" id="pwdButton">Store password in window.password</button> function getContentsOfPasswordField() { return jQuery("input#password").val(); } jQuery("button#pwdButton").on("click", function() { window.password = getContentsOfPasswordField(); alert("'" + password +"' stored in global var window.password") }); |
在此示例中,密码变量是全局变量,并且在页面的整个生命周期内都将持续存在,只是为了使其尽可能容易受到攻击并给出最坏的情况。也许限制变量的范围/生命周期可以保护它免受某些类别的攻击?
立即想到的攻击是 XSS,但是如果客户端首先受到 XSS 的攻击,攻击者无论如何都可以通过键记录来读取密码(请参阅this),因此将其保存在变量中不会,据我所见,增加了对 XSS 攻击的脆弱性。
请注意,问题的重点并不是这样做是否是一种不好的做法,这更多是关于客户端 Web 应用程序安全性的基本问题。
将密码保留在变量中可以让人们在浏览器工具中轻松访问!
假设按下存储密码按钮时调用的函数将密码存储在名为密码的变量中。即使这个变量在那之后根本没有在页面上使用,只是稍后在代码中的某个地方处理,所有要做的就是在他们的浏览器中打开开发人员工具,添加一个像
诚然,任何简单到足以让某人这样做的代码都可能不值得出现在网络上,甚至更不值得被干预,但我想这是一个教训,说明我们真的是多么脆弱。