在浏览器的javascript变量中保留用户密码是否会暴露任何特定的安全漏洞,超出基于浏览器的客户端的常见安全漏洞?
考虑这个片段作为一个简单的例子 - jsfiddle在这里
<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>
Run Code Online (Sandbox Code Playgroud)
在此示例中,密码变量是全局的,并且在页面的生命周期内持续存在,只是为了使其尽可能地打开攻击并提供最坏情况.也许限制变量的范围/生命周期可以保护它免受某些类型的攻击?
立即想到的攻击是XSS,但是如果客户端首先容易受到XSS的攻击,那么攻击者无论如何都可以通过密钥记录来读取密码(请参阅此内容),因此将其保存在变量中不会正如我所看到的,增加了对XSS攻击的漏洞.
请注意问题的关键不在于这样做是否是一种不好的做法,这更多是关于客户端Web应用程序安全性的基本问题.