在javascript变量中保存密码 - 安全隐患?

时间:2013-08-09 18:50:06

标签: javascript security passwords xss client-side

在浏览器的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攻击的漏洞。

请注意问题的关键不在于这样做是否是一种不好的做法,这更多是关于客户端网络应用安全性的基本问题。

1 个答案:

答案 0 :(得分:2)

将密码留在变量中会让人们只需使用浏览器工具即可访问! 让我们说一下当按下商店密码按钮时调用的函数,将密码存储在一个名为password的变量中。即使之后在页面上没有使用此变量,只需稍后在代码中的某个地方处理,所有人必须做的就是在浏览器中打开开发人员工具,添加alert(password);之类的语句,和Bam一样,密码字面上突然出现在他们面前。

无可否认,任何简单到足以让某人这样做的代码都可能不值得上网,甚至不值得被干扰,但我想这是我们真正有多可怜的教训。