1

着信パラメーターをサニタイズするために htmlpurifier ライブラリを使用しています。ただし、null バイトをフィルタリングしていません (%00 など)。何か不足していますか、それともライブラリがサポートしていませんか? 正規表現を使用する必要がありますか? 回答ありがとうございます。

編集:

構成オプションでhtmlpurifierを使用しています

$config = HTMLPurifier_Config::createDefault();
$config->set('Core', 'Encoding', "UTF-8");
$config->set('Cache', 'SerializerPath', "/webdirs/htmlpurify");

テスト文字列の場合

';</script><%00script>alert(845122)</script>

出力を取得します

';<%00script>alert(845122)
4

2 に答える 2

2

HTML Purifier がこの文字列を正しくフィルタリングしているように見えますが、それが Javascript コード内にある場合です。

</script>Javascript では、終了タグが Javascript 文字列リテラル内にある場合など、終了タグの出現を除外する必要があります。そうしないと</script>、文字列値に挿入すると、慎重でないフィルターがバイパスされ、Javascript 文字列から任意の HTML に抜け出す可能性があります。HTML Purifier は、その「タグ」を削除することで、これを正しくフィルタリングしたようです。

<%00script>Javascript 内でリテラル文字列を使用しても害はありません。それが実際に表示されるコンテキストである場合。

%00また、実際には null バイトや PHP、HTML、または Javascript スクリプトではないことに注意してください。パーセント記号の後に 2 つのゼロが続きます。ただし、URL%00は実際には null バイトとして解釈される可能性があるため%00、URL から除外する必要があります。

于 2010-07-19T05:01:42.823 に答える
2

HTMLPurifier/EncoderTest.php および HTMLPurifierTest.php で示されているように、HTML Purifier は null バイトを消去します。

    $this->assertPurification("Null byte\0", "Null byte");

    $this->assertCleanUTF8("null byte: \0", 'null byte: ');

たぶん、いくつかのコードを投稿する必要がありますか?

編集:あなたの編集は少し誤解を招くものです。実際の出力コードは次のとおりです。

';&amp;lt;%00script&amp;gt;alert(845122)

これは単なるプレーン テキストの文字列であり、完全に安全です。HTML ではパーセント記号に特別な意味はありません。

URL に文字列を配置する場合は、urlencode() を使用します。

于 2010-07-19T04:41:14.637 に答える