ユーザーのパスワードをブラウザの 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 アプリのセキュリティに関するより基本的な質問であることに注意してください。