在javascript变量中保存密码-安全性影响

Holding password in javascript variable - security implications?

本文关键字:安全性 影响 密码 保存 javascript 变量      更新时间:2023-09-26

除了基于浏览器的客户端的常见安全漏洞外,在浏览器中的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的攻击,攻击者无论如何都可以通过密钥日志记录读取密码(见此),因此据我所见,将其保存在变量中不会增加XSS攻击的漏洞。

请注意,问题的重点并不是这样做是否是一种糟糕的做法,这更像是一个关于客户端web应用程序安全的基本问题。

将密码保留在变量中,让人们可以简单地在浏览器工具中访问它!比方说,当按下存储密码按钮时调用的函数,将密码存储在一个名为password的变量中。即使在那之后根本不在页面上使用这个变量,只需稍后在代码中的某个地方进行处理,人们所要做的就是在浏览器中打开开发人员工具,添加一个像alert(password);和Bam这样的语句,密码就会在它们面前弹出。

承认,任何简单到让别人这么做的代码都可能不值得出现在网络上,甚至不值得被干预,但我想这是一个教训,说明我们真的是多么脆弱。