アスタリスクで隠されたパスワードを確認する方法
という記事が上がっています。
以下のJavaScriptをアドレスバーに入力すると、次のようなダイアログ内にパスワードが表示されます。
該当blogでは「便利」といった感想が書かれていますが、これは重大なセキュリティホールです。
例えば、以下のような、コードを書くと分かるのですが、フレームの外側から、フレームの内側に表示されたHTMLの
passwordがJavaScriptによって参照することができるのです。
<!-- 外側のページ -->
<html>
<head>
<script>
function aa() {
var f = window.frames;
var inputTag = f[0].document.getElementById("innerTarget");
alert(inputTag.value);
}
</script>
</head>
<body>
<input type="button" value="CHECK" onclick="aa()"/>
<iframe src="pass.html" id="wrap" />
</body>
</html>
<!-- 内側のページ pass.html -->
<html>
<body>
<input type="password" id="innerTarget"/>
</body>
</html>
上記ソースではiframeを用いています。つまり、画面全体をiframeとした入れ子構造を、
それと悟らせずに表示させることでHTMLのあらゆるパスワード欄に入力される文字列を引き抜くことができます。
これは例えSSLで通信していても防ぐことができません。複合化された後のHTMLからパスワードを読み取っているためです。
現在使用しているブラウザがこの問題に対処できているかを確認するには、以下のコードをコピーし、
ブラウザのアドレスバーに入力して見てください。
javascript:alert('%32%30%30%38%2f%34%2f%31%20%3a%2d%50');
これは、クロスドメインによる制約によって実際には機能しません。
同一のドメインではフレームの内外でJavaScriptによる参照を行うことができますが、
ドメインが違う場合は参照することができないため、iframeの内側に別のページを表示させてパスワードを抜くことはできません。
アドレスバーで実行されるJavaScriptは特殊で、該当ドメイン扱いで実行されるため、
どこのページでもパスワードが抜けてしまいます。
iframによる入れ子HTMLでのパスワード抜きはできませんが、離席中などに直接マシンを操作されるような場合、
このようなスクリプトでパスワードを盗み見られる可能性がありますので、相応の注意は必要です。
投稿日時 : 2008年4月1日 0:28