在浏览器的 javascript 变量中保存用户密码是否会暴露任何特定的安全漏洞,超出基于浏览器的客户端通常的安全漏洞?
将此片段视为一个简单的示例 - jsfiddle here
<label for="password">Password</label>
<input type="password" id="password"/><br/><br/>
<button type="button" id="pwdButton">Store password in window.password</button>
<script>
function getContentsOfPasswordField() {
return jQuery("input#password").val();
}
jQuery("button#pwdButton").on("click", function() {
window.password = getContentsOfPasswordField();
alert("'" + password + "' stored in global var window.password")
});
</script>
在此示例中,密码变量是全局变量,并且在页面的整个生命周期内都将持续存在,只是为了使其尽可能容易受到攻击并给出最坏的情况。也许限制变量的范围/生命周期可以保护它免受某些类别的攻击?
立即想到的攻击是 XSS,但是如果客户端一开始就容易受到 XSS 攻击,那么攻击者无论如何都可以通过键记录来读取密码(请参阅this),因此目前不会将其保存在变量中如我所见,增加了对 XSS 攻击的脆弱性。
请注意,问题的重点并不是这样做是否是一种不好的做法,这更多是关于客户端 Web 应用程序安全性的基本问题。