「JavaScript のリテラルに任意の文字列を出力してみる」へのコメント
「水無月ばけらのえび日記 : JavaScript のリテラルに任意の文字列を出力してみる」について、7件のコメントが書かれています。
[4775] Re: 「JavaScript のリテラルに任意の文字列を出力してみる」
えむけい (2008年1月24日 7時27分)
・XHTMLとして「正しく」解釈された場合
の意味がよくわかりません。XHTML(=XML)のコメント中では--は出現禁止(出現すると整形式ではなくなる)じゃありませんでしたっけ。
ところで【謎】、HTML5のドラフトが出たようなのでレビュー期待しています【謎】。
[4776] Re: 「JavaScript のリテラルに任意の文字列を出力してみる」
ばけら (2008年1月24日 13時16分)
>・XHTMLとして「正しく」解釈された場合
>の意味がよくわかりません。XHTML(=XML)のコメント中では--は出現禁止(出現すると整形式ではなくなる)じゃありませんでしたっけ。
です。
なので、その禁止物がインジェクションされると困るという話です。
[4777] Re: 「JavaScript のリテラルに任意の文字列を出力してみる」
スターダスト (2008年1月24日 16時14分)
表題は「JavaScript のリテラルに任意の文字列を出力してみる」ということですので、以下、私が書くことはハズしているのですが・・・「リテラルに」という部分で。
こんな感じのHTML 断片があったとします。
<script type="text/javascript">
<!--
<%= value %>; //※注.foo.bar=がないです。
//-->
</script>
「ユニコードエスケープ」では、恐らく任意のスクリプトの実行が可能なのではないかと存じます。というか、手元のFirefox ver 1.508 では・・・で確認したのですが。
たとえば、
I am the Α and the Ω.
という文章をalertすることは可能でした。この調子で好きな文字を作っておいてevalしてしまえばなんていうことないですよね。たぶん。
[4778] Re: 「JavaScript のリテラルに任意の文字列を出力してみる」
びい (2008年1月25日 1時45分)
SO905iのブラウザではscript要素の中はそのまま描画してくれました。
[4779] Re: 「JavaScript のリテラルに任意の文字列を出力してみる」
えむけい (2008年1月26日 5時6分)
>>・XHTMLとして「正しく」解釈された場合
>>の意味がよくわかりません。XHTML(=XML)のコメント中では--は出現禁止(出現すると整形式ではなくなる)じゃありませんでしたっけ。
> です。
> なので、その禁止物がインジェクションされると困るという話です。
整形式制約違反は致命的エラーで、
http://www.w3.org/TR/xml/#dt-wfc
致命的エラーの場合XMLプロセッサは通常の処理を続けてはならないので、
http://www.w3.org/TR/xml/#dt-fatal
スクリプトが実行されたりすることはないと思います。
任意の文字列を入力できなければならないという要件なのに「--」を入力できないので仕様を満たしていないという点は困るかもしれませんが、少なくともこの点に関しては危険ではないはずです。
パーサが正しくないなら話は別ですが
> XHTML として「正しく」解釈された場合
とわざわざ断っているので余計に意味がわかりません。
[4782] Re: 「JavaScript のリテラルに任意の文字列を出力してみる」
ばけら (2008年1月28日 13時52分)
>スクリプトが実行されたりすることはないと思います。
>任意の文字列を入力できなければならないという要件なのに「--」を入力できないので仕様を満たしていないという点は困るかもしれませんが、少なくともこの点に関しては危険ではないはずです。
ああ、なるほど。「危険」という表現に語弊があったかもしれないですね。
ユーザーが「--」を入力したときにちゃんと動作しない危険性があるので NG という意味です。
というわけで表現を微修正してみました。
[4783] Re: 「JavaScript のリテラルに任意の文字列を出力してみる」
ばけら (2008年1月28日 13時53分)
>SO905iのブラウザではscript要素の中はそのまま描画してくれました。
ぐはー。携帯は script要素知らないですか……。
「水無月ばけらのえび日記 : JavaScript のリテラルに任意の文字列を出力してみる」についてコメントを書く場合は、以下のフォームに記入してください。