ブラウザの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アプリケーションのセキュリティに関する基本的な問題:)変数にパスワードを残す
パスワードを入力した後、パスワード入力ページに「滞在する」べきではありません。 1.クライアントマシン上の他のソフトウェアが(ブラウザのメモリを読み取って)パスワードを読み取る可能性がありますが、これはクライアント側の問題であり、常に適用される可能性があります。 2.パスワードを読むブラウザの拡張機能の可能性。 3.パスワードを読む同じページ上の任意のスクリプトの可能性。 –
パスワードは変数に保持されているため、これらの潜在的な攻撃は可能ですか?もし悪意のあるサードパーティのソフトウェアがjavascript VMにアクセスできるのであれば、それはパスワード入力に入力されたときにパスワードを読み込んだり読み込んだりできないのですか? – davnicwil
これを 'window'に設定すると、クライアントのブラウザによって実装されている場合、組み込みセキュリティ(例えば、起点)を回避することになります。また、あなたの家の窓を開けておけば、盗むことができますが、それはあなたのドアを開けたままにする必要はありません。 –