2013-08-09 6 views
8

ブラウザのjavascript変数にユーザーのパスワードを保持すると、ブラウザベースのクライアントの通常のセキュリティ上の脆弱性を超える特定のセキュリティ上の脆弱性が露呈しますか?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攻撃に対する脆弱性が増します。

質問のポイントは、実際にこれを行うことは悪い習慣であるかどうか、これは、クライアント側のWebアプリケーションのセキュリティに関する基本的な問題:)変数にパスワードを残す

+2

パスワードを入力した後、パスワード入力ページに「滞在する」べきではありません。 1.クライアントマシン上の他のソフトウェアが(ブラウザのメモリを読み取って)パスワードを読み取る可能性がありますが、これはクライアント側の問題であり、常に適用される可能性があります。 2.パスワードを読むブラウザの拡張機能の可能性。 3.パスワードを読む同じページ上の任意のスクリプトの可能性。 –

+1

パスワードは変数に保持されているため、これらの潜在的な攻撃は可能ですか?もし悪意のあるサードパーティのソフトウェアがjavascript VMにアクセスできるのであれば、それはパスワード入力に入力されたときにパスワードを読み込んだり読み込んだりできないのですか? – davnicwil

+2

これを 'window'に設定すると、クライアントのブラウザによって実装されている場合、組み込みセキュリティ(例えば、起点)を回避することになります。また、あなたの家の窓を開けておけば、盗むことができますが、それはあなたのドアを開けたままにする必要はありません。 –

答えて

1

の詳細ですされていませんのでご注意ください人々に公開してブラウザツールで簡単にアクセスできます。 ストアパスワードボタンが押されたときに呼び出される関数は、passwordという変数にパスワードを格納します。この変数がページの後で使用されていなくても、後でコードのどこかで処理するだけで、ブラウザに開発者ツールを開き、alert(password);のようなステートメントを追加し、パスワードは文字通りそれらの前にポップアップします。

誰かにそれをさせるのに十分なシンプルなコードは、おそらくWebに載る価値がないし、それに耐えられるほど価値がないかもしれませんが、私たちが本当にどれほど恐るべきものか教訓になると思います。

+0

本当ですが、これは本当にネットワークを介したリモート攻撃に関する質問です。私は、ユーザー+マシンがセッションのために物理的に安全であると仮定していました! – davnicwil

+1

これを考えると、パスワードやセッションクッキーを保存しているブラウザより攻撃者に余計な機会はほとんどありません。ユーザーがブラウザを物理的に安全に保つことは、Webアプリケーション開発者のコ​​ントロールを超えています。 – davnicwil

関連する問題