2

HTMLでのXMLインジェクション攻撃に関するレポートを書いています。したがって、HTMLのコンテンツとして(マングルされた)HTMLコンテンツを使用します。そのため、HTMLコンテンツをCDATAブロックでラップしようとしていますが、正しくレンダリングされているようです。

私は(W3Cによって検証された)文書を持っています:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>report</title>
    </head>
    <body>
        <div><![CDATA[AuthType=<META HTTP-EQUIV="Set-Cookie" Content="USERID=&lt;SCRIPT&gt;alert('XSS')&lt;/SCRIPT&gt;">]]></div>
    </body>
</html>

ウィキペディアの記事についての私の理解から、これは、コンテンツが「パーサーがマークアップではなく文字データとしてのみ解釈されるようにマークされる」必要があることを意味します。したがって、出力は次のようになります。

AuthType=<META HTTP-EQUIV="Set-Cookie" Content="USERID=&lt;SCRIPT&gt;alert('XSS')&lt;/SCRIPT&gt;">

ただし、両方Chrome 21.0.1180.60 mで、Firefox 14.0.1すべてのレンダリングは

]]>

何が起こっている?<![CDATA[から最初までのすべてが、]]>すべてのキャラクターがエスケープされたかのように画面に表示されるべきではありませんか?

4

1 に答える 1

5

CDATA セクションは、XML 解析モードでのみブラウザーによって認識されます。これまで見てきたように、従来の HTML モードでは奇妙なことが起こります。

そのため、XHTML コンテンツ タイプを含むドキュメントを送信するようにサーバーを構成する必要があります。これにより、古いバージョンの IE (IE 8 まで) でドキュメントがまったくレンダリングされなくなります。

<HTML タグを HTML ドキュメントのコンテンツとして表示する実際的な方法は次のとおり&lt;です。従来の HTML で動作し、XHTML で動作します。b) データを要素にラップします。従来の HTML で動作します (ただし、XML コンテンツ タイプはありませんが、XHTML doctype を宣言するだけでは問題ではなく、とにかく無視されます)。例:&&amp;xmp

<xmp><![CDATA[AuthType=<META HTTP-EQUIV="Set-Cookie" Content="USERID=&lt;SCRIPT&gt;alert('XSS')&lt;/SCRIPT&gt;">]]></xmp>

マークアップはxmp、モノスペース フォントとpre、空白が尊重されるようなレンダリングも意味します。ただし、これらは CSS でオーバーライドできます。このxmp要素はずっと前に HTML 仕様から削除されましたが、ブラウザで十分にサポートされています。

于 2012-08-07T17:38:40.953 に答える