右クリックとJavaScriptなアンカーとステータスバー偽装

昨日の日記を見た匿名の人から質問のメールを頂きました。質問内容としては、『今後は右クリックすればOKなんでしょうか』というもの。どんなときに何が右クリックOKなのか不明な質問であったものの、セキィリティー面で気にしているらしいということはわかりました。なんとか誤解を解いておかなくてはいけません。

まずは、適当にツギハギした実験用のHTMLを作成。以下のようなものです。InternetExplorer用に作って実験しています。すみません。

<script type="text/javascript">
<!--
function Help(strFName) {
    wPopup = window.open(
        strFName,
        'wPopup',
        'scrollbars=1,width=600,height=400,menubar=1,\
          resizable=1,toolbar=1,status=1,location=1'
        );
    wPopup.focus();
}
// -->
</script>
<ol>
<li>
<a href="http://example.com/" 
onclick="Help('http://example.org/');return false;" 
onkeypress="Help('http://example.org/');return false;" 
id="modori">excample.com</a>
</li>
<li>
<a href="javascript:location.href='http://example.org/';" 
onMouseover="window.status='http://example.com/'; return true" 
onMouseout="window.status=' '; return true">excample.com</a>
</li>
<li>
<a href="javascript:Help('http://example.org/');" 
onMouseover="window.status='http://example.com/'; return true" 
onMouseout="window.status=' '; return true">excample.com</a>
</li>
<li>
<a href="http://example.org/" 
onMouseover="window.status='http://example.com/'; return true" 
onMouseout="window.status=' '; return true">excample.com</a>
</li>
</ol>

このHTMLでは4個のリンクが表示されます。どれもが、example.comへ、いざなうようにみせかけながら、example.orgを表示しようとするものです。comのフリしてorgです。JavaScriptをオンにしているIEでは、アンカーのonMouseoverでステータスバーには、example.comが表示されるようになっています。

昨日の日記では、これらの4個のリンクのうち、3番目のものが、右クリックで作動しない(JavaScriptオンのIEで)というお話をしました。メールをくれた質問者は、じゃぁ今後は右クリックならOKなんだろう、ということなのでしょう。ですが、右クリックの効果は色々でして、1番のリンクではどうなのかというと、example.comに、2番のリンクでは、example.orgに誘導されます。1番と3番は、orgに誘導されない、という意味で効果があったというべきでしょうけれども、2番のリンクでは騙されてしまいかねない結果になります。右クリックは万能ではありません。

なお、JavaScriptを切ってあるならどうなのかについても、動作を見ておいたほうが良いと思います。2番3番は左クリックでも右クリックでも作動しません。1番は、comへ誘導されますので無害です。4番は、onmouseoverで、orgへのリンクであると表示されます。

このように、動作状況はさまざまです。右クリックだから安心だとは言えません。

余談ですが、IEではリンク先を予見するためにステータスバーが重要です。windows.statusに値をほうりこむJavaScriptがあったり文字列をスクロールまでさせていたりするサイトがありますけれど、やめておいたほうが良いと思います。