IEのステータス・バーを偽装する手法が複数公開される(IT Pro)

http://itpro.nikkeibp.co.jp/free/ITPro/Security/20040630/146608/
でもですね、仕様にない記述をどう解釈するかはブラウザの任意ですから、難しいところです。
 
(1)A要素の二重記述について
HTMLでは(たとえTransitionalでも)、アンカー要素の中にはブロックレベル要素を入れることができないし、またアンカーの中に、孫要素であってもアンカーを入れることはできません。
ところで、一般的なブラウザは、矛盾する2つの情報がある場合には後者を優先する、つまり「上書きする」という傾向があります。たとえば、文法を間違えてはいないけれど矛盾する記述
<font color="red"><font color="blue">にわとり</font></font>
の場合、「にわとり」の文字は、両方のタグの影響を受けて紫色になったりすることはなく*1、後に書かれたタグの記述が、要素の性質を決定します。
 
というわけで、矛盾するアンカータグについても、
<a href="niwatori.html"><a href="niwatoribbs.cgi">にわとり</a>
後に書かれたタグの記述が、アンカーの性質となります。
でもって、上のようにタグを記述すれば、ちゃんとブラウザは性質を上書きしてくれるのですが、アンカーの内容にブロックレベル要素が入ると、挙動がおかしくなります。
<a href="niwatori.html"><table><tr><td>にわとり</td></tr></table></a>
これだけでも、ブラウザはまともに表示しません。IEでは、「にわとり」の文字のところではカーソルがポインタになりますが、リンク先に飛べなくなっています。また、IEですと、どうやら「アンカーの性質がtable要素全体にかかる」と解釈されて、テーブルのボーダー部分などにもアンカーの性質がかかっているようです。
 
ここで、要素の内容にその要素が置けないものがある場合に、内側のタグを無視する方法もあります。たとえば、
<h1>1<p>2</p>3
上の記述では、pタグは中途半端に無視されます。たいていのブラウザでは、pで指定されている性質はp内部で有効であり、h1の性質はp内部でも有効です。上の記述の「3」の文字がh1の影響を受けるところをみると、「pの開始タグの以前にh1の終了タグが補われる」という手法はとられてないようです。
 
というわけで、問題の記述

<a href="

http://www.microsoft.com/">
href="Click">http://www.google.com/">Click here</td></tr></table></a>

について、IEは、まず「前にあるアンカーの性質はtable要素全体にかかる」と考え、そしてtd内部の文字データの部分は後ろのアンカーの指定が上書きされる、と解釈します。
つまり、この時点では「文字データ部分以外の(枠などの)テーブル部分」と、「文字データ部分」という、2つのアンカーが有効であるわけです。そして、テーブル部分のアンカーは、先に書いたとおり「挙動がおかしい」わけであり、後ろにあるアンカーが正しく上書きされなくなる、ということだろうと思われます*2
続きは後日。たぶん。

*1:CSSのfont-sizeプロパティのように、両方の指示の影響が加算されるものはあります

*2:偽装される問題についてはid:sarasaさまも言及されていますが、私は、アンカーがテーブル内部で挙動がおかしいのはある意味しょうがないと思っています。テーブルタグごと(タグ部分だけ)無視すればいいのでしょうが、しかし[ <h1>1<p>2</p>3 ]という記述ですらpタグは無視されないのですから(「3」の文字の部分がh1要素の内容となります)、仕様違反の記述は上書きで対応するというのがIEの基本方針なのでしょう。