12

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

4

1 に答える 1

3

パスワードを変数に残したままにしておくと、ブラウザー ツールで簡単にアクセスできるようになります。パスワードの保存ボタンが押されたときに呼び出される関数は、password という変数にパスワードを保存します。その後、この変数がページでまったく使用されず、後でコードのどこかで処理されたとしても、ブラウザーで開発者ツールを開きalert(password);、Bam のようなステートメントを追加するだけです。文字通り彼らの前に現れます。

確かに、誰かにそんなことをさせてしまうほど単純なコードは、おそらく Web 上に存在する価値はなく、干渉される価値もないでしょう。

于 2013-08-10T00:04:37.730 に答える