したがって、XSSフィルタリングをテストするための XSSチートシート がありますが、 良性ページの例 UTF-8コードは、動作不良のデータを処理できます。
どこで良い、そして悪いデータを見つけることができますか?または、文字のトリッキーなシーケンスとは何ですか?
チェックアウト Markus KuhnのUTF-8デコーダーストレステスト
中国語の文字を含むファイルは、文字ごとに使用するバイト数をどのように知るのですか? —間違いなく、他にも役立つSOの質問があります。
UTF-8では、次のタイプのバイトを取得します。
Binary Hex Comments
0xxxxxxx 0x00..0x7F Only byte of a 1-byte character encoding
10xxxxxx 0x80..0xBF Continuation bytes (1-3 continuation bytes)
110xxxxx 0xC0..0xDF First byte of a 2-byte character encoding
1110xxxx 0xE0..0xEF First byte of a 3-byte character encoding
11110xxx 0xF0..0xF4 First byte of a 4-byte character encoding
(最後の行は0xF0..0xF7を読み取るように見えますが、Unicodeの21ビット範囲(U + 0000-U + 10FFFF)は、最大有効値が0xF4であることを意味します;値0xF5..0xF7は有効なUTF-8。)
特定のバイトシーケンスが有効なUTF-8であるかどうかを確認することは、次のことを考慮する必要があることを意味します。
有効なUTF-8では、バイト0xF5..0xFFは発生しません。
一部の文字には複数の表現があります。たとえば、Unicode文字U + 0000(ASCII NUL)は次のように表すことができます。
0x00
0xC0 0x80
0xE0 0x80 0x80
0xF0 0x80 0x80 0x80
ただし、Unicode規格では、最後の3つの選択肢は最小限ではないため受け入れられないと明確に述べています。バイト0xC0および0xC1が有効なUTF-8で表示されることはありません。これらによってエンコードできる文字は、0x00..0x7Fの範囲のシングルバイト文字として最小限にエンコードされるためです。
Basic Multi-lingual Plane(BMP)内では、Unicode値U + D800-U + DFFFはUTF-16サロゲート用に予約されており、有効なUTF-8でエンコードされているようには見えません。それらがUTF-8で有効である場合(私は強調しますが、そうではありません)、サロゲートはエンコードされます:
したがって、BADデータには、これらのさまざまな処方箋に違反するサンプルが含まれている必要があります。
バイトオーダーマーク(BOM)U + FEFF、別名ゼロ幅ノーブレークスペース(ZWNBSP)は、UTF-8でエンコードされていない状態で表示できないことに注意してください。バイト0xFFおよび0xFEは有効なUTF-8では許可されません。エンコードされたZWNBSPは、UTF-8ファイルでは0xEF 0xBB 0xBFとして表示されますが、BOMはUTF-8では完全に不要です。
Unicodeには 非文字 もあります。 U + FFFEとU + FFFFはそのような2つの非文字です(各プレーンの最後の2つのコードポイント、U + 1FFFE、U + 1FFFF、U + 2FFFE、U + 2FFFF、... U + 10FFFE、U + 10FFFFはその他です) )。これらは通常、データ交換のためにUnicodeデータに表示されるべきではありませんが、個人使用で表示される可能性があります。 Unicodeの非文字のかなり複雑な履歴など、多くの厄介な詳細については、Unicode FAQリンクを参照してください。( Corrigendum#9:Clarification About Noncharacters 2013年1月、そのタイトルが示唆することを行います-非キャラクターの意味を明確にします。)
Jeffrey Bergaminiのこの便利なオンラインツール を使用して、テキストをホモグリフの非常に奇妙なUTF8文字列に変換できます。
典型的な
Lorem ipsum dolor sit amet、consectetur adipiscing elit、sed do eiusmod tempor incididunt ut Labore et dolore magna aliqua。
このようになる:
Ḽơᶉëᶆȋṕšᶙṁḍỡḽǭᵳӓṁệẗӓṁệẗ、ĉṓɲṩḙċťᶒțûɾấɖḯƥĭṩčįɳġḝłįʈ、șếᶑᶁⱺẽḭŭŝḿꝋďṫĕᶆᶈṓɍỉñḉīḑȋᵭṵńťṷŧḹẩḇőꝛếéȶđꝍꞎôꝛȇᵯáꞡᶇāąⱡîɋṹẵ。
WikipediaのUTF-8記事 は、どのバイトシーケンスが有効/無効であるかについての適切な概要を示しています。読む価値のある別の記事は W3C I18N FAQ:Multilingual Forms です。