web-dev-qa-db-ja.com

HTMLコメント内のScriptタグの効果

私は最近CTFに参加しましたが、そのCTFのソリューションはブラウザのこの奇妙な動作に基づいています。

最初のケースで、HTMLコメント内にスクリプトタグを含め、そのコメントを閉じない場合、ブラウザ(Firefox)は、本文部分を含むコメントとしてその後のコンテンツ全体を想定します。そして警告は出ませんでした。

コード:

<script>
alert(1);
<!--<script
alert(2);
</script>
<body>Hello</body>

ブラウザ:

enter image description here

Secondでは、すべてのコードは同じですが、コメントからスクリプトタグを削除し、ブラウザはその位置でコメントを終了し、他のすべてのコードはスムーズに実行されます。両方のアラートがポップされました1,2

コード:

<script>
alert(1);
<!--
alert(2);
</script>
<body>Hello</body>

ブラウザ:

enter image description here

だから私は2つの質問があります。

  1. ブラウザがコメントとして次の行のコードを想定している最初のケースで、alert(1)さえポップされないのはなぜですか?
  2. 2番目に、ブラウザはスクリプトタグに基づいてHTMLコメントの境界が異なるのはなぜですか。

それらに答えるか、リソースをポイントしてください。そして、質問を自由に変更してください。私はこの分野に不慣れで、ごみを追加した可能性があります。

3
Anni

確かに興味深い状況です。まず、_<script>_タグをネストすることはできません。最初のケースでは

_alert(1);
<!--<script
alert(2);
</script>
<body>Hello</body>
_

_<script_に_>_がありません。それでもうまくいきません。ただし、これを_</script>_に置き換えると、alert(1)が実行されます。 2番目のケースは、alert(2)が_<script>_タグ内に含まれる場合と同じです。

1
positron