新生鳩丸掲示板♯

bakera.jp > 新生鳩丸掲示板♯ > スレッド内全記事表示 (記事 3630 からのスレッド)

スレッド内全記事表示 (記事 3630 からのスレッド)

[3630] title要素とdocument.title

スターダスト (2006年5月30日 9時23分)

上のページにアクセスしてソースを見るとtitle要素は

<title>happa&lt;/a&gt;&lt;script&gt;alert(0)&lt;/script&gt;&lt;a&gt; - Google 検索</title>

となっており、文字参照が出現していることがわかります。

ところが、アドレスバーで、javascript:alert(document.title) としてやると、表示される document.title は

happa</a><script>alert(0)</script><a> - Google 検索

となり、せっかくの文字参照が、ほどけてしまっています。WindowsXPwithSP2 で確認しましたが、IE でも Fx でも Opera でも同様でした。

document.title の中身は、【この年になるまで(なぞ)】てっきり

happa&lt;/a&gt;&lt;script&gt;alert(0)&lt;/script&gt;&lt;a&gt; - Google 検索

になるかと信じていました。 文字参照がほどけてしまうのは、標準的な仕様なのでしょうか?ポインタを御教示いただければ幸いです。

よろしくお願いいたします。

[3631] Re: title要素とdocument.title

スターダスト (2006年5月30日 9時27分)

JavaScriptオフな Fx で Domいんすぺくたぁで見てみましたが、文字参照がほどけていました。 HTMLってそういうものでしたか… (orz)

[3632] Re: title要素とdocument.title

はせがわ (2006年5月30日 9時55分)

http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-11C98490

あたりによると

|Note that character references and references to predefined entities are considered to be expanded by the HTML or XML processor so that characters are represented by their Unicode equivalent rather than by an entity reference.

だそうです。

[3633] Re: title要素とdocument.title

えむけい (2006年5月30日 11時40分)

DOMに値をセットしてHTML出力としてシリアライズしたら自動的に文字参照になる(だから原理的にXSSは発生し得ない)のですから、逆に文字参照を含んだHTMLを解析したら参照が自動的に展開されるのは当然だと思いますが。

何を問題にしてるのかさっぱりわかりません。単に自分の思い込みと結果が異なっていたのが気に喰わないだけですか?

[3634] Re: title要素とdocument.title

スターダスト (2006年5月30日 12時33分)

えぇと…思い込みと結果が異なっていますが、気に食わないわけではなくて、ビックリしたのです。で、思い込みを正すためにもと。

>DOMに値をセットしてHTML出力としてシリアライズしたら自動的に文字参照になる

ということを私は全然知らないわけなのでした。

[3635] Re: title要素とdocument.title

ばけら (2006年5月30日 13時54分)

>JavaScriptオフな Fx で Domいんすぺくたぁで見てみましたが、文字参照がほどけていました。 HTMLってそういうものでしたか… (orz)

 DOM は、HTML や XML のパース結果として得られた DOM ツリーにアクセスする感じのイメージです。文字参照などはパース時に展開していますので、DOM ツリー上に存在するテキストノードの中身にアクセスした時点では、文字参照は既に展開されています。

 というわけで、そういうものだと思います。

 ちなみに DOM でテキストノードに <> 等を入れても、それはタグとしては処理されず、ちゃんと文字列として処理されます。

[3638] Re: title要素とdocument.title

えむけい (2006年5月30日 18時36分)

>ということを私は全然知らないわけなのでした。

ばけらさんが何度も書いてますが、ぜんぜん読んですらいなかったということでしょうか。

http://bakera.jp/hatomaru.aspx/ebi/topic/2473

> この日記を処理している hatomaru.dll というプログラムでは、HTML の出力をサニタイズする処理を一切書いていません。すべてが DOM で処理されている (そして InnerXml に値を直接セットしないと決めている) ので、サニタイズを意識する必要がないのです。これは非常に気が楽でした。

とか。

http://bakera.jp/hatomaru.aspx/htmlbbs/article/3321

> DOM でやってしまうという方法は、こういうことも一切考えなくて良くなるので、その意味でも楽ですね。

とか。

http://bakera.jp/hatomaru.aspx/ebi/topic/397

> 出力 HTML を DOM で扱っているおかげで XSS はないのですが、制御文字系は斬るようにした方が良いかも。

とか。

http://bakera.jp/hatomaru.aspx/htmlbbs/article/345

> ちなみに hatomaru.dll は内容全てを DOM で作っているので、System.Xml 系のクラスにバグが無い限りは安全、なはずです。

とか。

[3639] Re: title要素とdocument.title

スターダスト (2006年5月31日 11時9分)

ご教示大変にありがとうございました。

心を入れ替えます。

[3640] Re: title要素とdocument.title

スターダスト (2006年5月31日 11時14分)

>ばけらさんが何度も書いてますが、ぜんぜん読んですらいなかったということでしょうか。

確かに仰られるとおりです。よく考えて読んでいませんでした。DOMから(X)HTMLを作り出して出力する仕組みにばかり気がいっていました。(X)HTMLのフォームからDOMにつっこむ際にどうなるかまでについては脳内で曖昧にしていたようです。

今度こそ一生忘れないことでしょう。

[3651] Re: title要素とdocument.title

ZnZ (2006年6月3日 17時45分)

>http://bakera.jp/hatomaru.aspx/ebi/topic/397

>> 出力 HTML を DOM で扱っているおかげで XSS はないのですが、制御文字系は斬るようにした方が良いかも。

>とか。

XMLだとそもそも

http://www.fxis.co.jp/xmlcafe/tmp/rec-xml.html#charsets

に含まれていない制御文字系はそのまま含められないので(数値文字参照でも無理)、無理矢理入れるならbase64とかにするしかないと思うのですが。

最近の日記

関わった本など