本当に良い、悪いUTF-8サンプルテストデータ[終了]


88

したがって、XSSフィルタリングをテストするためのXSSチートシートがありますが、悪意のあるページの例以外に、UTF-8コードが動作不良のデータを処理できることを確認するための悪質なまたは不正なテストデータを見つけることができません。

テストに適したデータはどこにありますか?悪いデータはどこにありますか?または、トリッキーな文字のシーケンスとは何ですか?


4
columbia.edu/kermit/utf8.htmlは別の良いものです
Xeoncross


14
ăѣ𝔠ծềſģȟᎥ𝒋ǩľḿꞑȯ𝘱𝑞𝗋𝘴ȶ𝞄𝜈ψ𝒙𝘆𝚣1234567890!@#$%^&*()-_ = + [{]} ;: '"、<。> /?~𝘈Ḇ𝖢𝕯٤ḞԍНǏ𝙅ƘԸⲘ𝙉০Ρ𝗤Ɍ𝓢ȚЦ𝒱Ѡ𝓧ƳȤѧᖯć𝗱ễ𝑓𝙜Ⴙ𝞲𝑗𝒌ļṃʼnо𝞎𝒒ᵲꜱ𝙩ừ𝗏ŵ𝒙𝒚ź1234567890!@#$%^&*()-_=+[{]};:'",<.>/?〜АḂⲤ𝗗𝖤𝗙ꞠꓧȊ𝐉𝜥ꓡ𝑀𝑵Ǭ𝙿𝑄Ŗ𝑆𝒯𝖴𝘝𝘞ꓫŸ𝜡ả𝘢ƀ𝖼ḋếᵮℊ𝙝Ꭵ𝕛кιṃդⱺ𝓅𝘲𝕣𝖘ŧ𝑢ṽẉ𝘅ყž1234567890!@#$%^&*()-_ = + [{]}; : '"、<。> /?~Ѧ𝙱ƇᗞΣℱԍҤ١𝔍К𝓛𝓜ƝȎ𝚸𝑄Ṛ𝓢ṮṺƲᏔꓫ𝚈𝚭𝜶Ꮟçძ𝑒𝖿𝗀ḧ𝗂𝐣ҝɭḿ𝕟𝐨𝝔𝕢ṛ𝓼тú𝔳ẃ⤬𝝲𝗓1234567890!@#$%^&*()-_=+[{]};:'",<.>/?〜𝖠Β𝒞𝘋𝙴𝓕ĢȞỈ𝕵ꓗʟ𝙼ℕ0Ρ𝗤ՀꓢṰǓⅤ𝔚Ⲭ𝑌𝙕𝘢𝕤
アンドリュー・

回答:


98

1
あなたはこれに少しも努力をしませんでしたが-そのページは私が探していたものです。;)
Xeoncross 2009

73
答えを見つける場所を知ることは、多くの場合、答えを知ることと同じくらい重要です。
ジョナサンレフラー、

19
5と6バイトのシーケンスが許可されていて、プレーン17以上が削除される前に、彼のテストが古いUTF-8の定義に基づいていることを警告します。そして、それはコードポイントU + FFFEとU + FFFFがUTF-8では無効であることを意味しますが、Unicodeコンソーシアムに
よれ

34

漢字を含むファイルは、文字ごとに使用するバイト数をどのようにして知るのですか?も参照してください—間違いなく、他にも役立つ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-16サロゲート

有効な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のシングルバイト文字として最小限にエンコードされるためです。

UTF-16サロゲート

Basic Multi-lingual Plane(BMP)内では、Unicode値U + D800-U + DFFFはUTF-16サロゲート用に予約されており、有効なUTF-8でエンコードして表示することはできません。それらがUTF-8で有効だった場合(私は強調しますが、そうではありません)、サロゲートはエンコードされます。

  • U + D800 — 0xED 0xA0 0x80(最小の上位代理)
  • U + DBFF — 0xED 0xAF 0xBF(最大のサロゲート)
  • U + DC00 — 0xED 0xB0 0x80(最小の下位サロゲート)
  • U + DFFF — 0xED 0xBF 0xBF(最大の下位サロゲート)

悪いデータ

そのため、BADデータには、これらのさまざまな処方に違反するサンプルが含まれている必要があります。

  • 最初のバイト値のいずれかが前にない継続バイト
  • 複数文字の最初のバイトの後に十分な継続バイトがない
  • 非最小のマルチバイト文字
  • UTF-16サロゲート
  • 無効なバイト(0xC0、0xC1、0xF5..0xFF)。

バイトオーダーマーク(BOM)U + FEFF、別名ゼロ幅ノーブレークスペース(ZWNBSP)は、UTF-8ではエンコードされていないように見えないことに注意してください。有効なUTF-8ではバイト0xFFおよび0xFEは許可されていません。エンコードされたZWNBSPは、UTF-8ファイルで0xEF 0xBB 0xBFとして表示できますが、BOMはUTF-8では完全に不要です。


いくつかのもありますnoncharactersユニコードでは。U + FFFEとU + FFFFはそのような2つの非文字です(そして各平面の最後の2つのコードポイント、U + 1FFFE、U + 1FFFF、U + 2FFFE、U + 2FFFF、... U + 10FFFE、U + 10FFFFは他のものです) )。これらは通常、データ交換のためにUnicodeデータに表示されるべきではありませんが、個人使用で表示される可能性があります。Unicodeの非文字のかなり複雑な履歴を含む多くの厳格な詳細については、Unicode FAQリンクを参照してください。(2013年1月にリリースされたCorrigendum#9:Clarification About Noncharactersは、そのタイトルが示唆することを行います—非文字の意味を明確にします。)


この素晴らしいリストをありがとう。これらのそれぞれを今より詳細にチェックする予定です。
Xeoncross 2009

3
非文字は「UTF-8エンコードされたデータに表示されるべきではない」というコメントは誤解を招くものです。非文字は、オープンインターチェンジ用の UTF-8エンコードされたデータには表示されませんが、それでもUTF-8エンコーダー/デコーダーで受け入れられる必要があります
Simon Kissane 14

@SimonKissane:どうやら、私は2013年1月にリリースされた現状のCorrigendum#9に混乱した多くの1人だったようです。上のUnicodeのFAQセクション全体noncharactersは読む価値があります。情報をありがとう。(また、私のコメントには、Unicode規格の発言と一致するはずですが(「言うべきではありません」)、「オープンインターチェンジ」には表示されないが、「内部での使用」には使用できることが意図されています。 '。)
ジョナサンレフラー

1
@AdrianMaire:Unicode(9.0.0)標準(ページ番号125、PDFファイルのp54)の第3章の表3.6を参照してください。他にどのソースを参照しているかはわかりませんが、私が言ったことはその表でカバーされていると思います。
Jonathan Leffler 2017年

@JonathanLefflerあなたは100%正しいです、参照をありがとう。
エイドリアンメア2017年

17

あなたは使用することができますジェフリーBergaminiからこの便利なオンラインツールを Homoglyphsの本当に奇妙なUTF8文字列に任意のテキストを変換します。

典型的な

Lorem ipsum dolor sit amet、consectetur adipiscing ellit、sed do eiusmod tempor incididunt ut Laber et dolore magna aliqua。

このようになります:

Ḽơᶉëᶆȋṕšᶙṁḍỡḽǭᵳʂǐťӓṁệẗ、ĉṓɲṩḙċťᶒțûɾấɖḯƥĭṩčįɳġḝłįʈ、șếᶑᶁⱺẽḭŭŝḿꝋďṫĕᶆᶈṓɍỉñḉīḑȋᵭṵńťṷŧḹẩḇőꝛếéȶđꝍꞎôꝛȇᵯáꞡᶇāąⱡîɋṹẵ。


6
これはUTF8のテストに実際には役立たないためだと思います。ケースの完全なセットに近いものは何も得られず、「悪い」ケースはなく、形式はテストにあまり役立ちません。それは奇妙なキャラクターを取得する方法にすぎません。
エイドリアンメア2017年

試しましたか?そのジェネレータはおもしろくありません。それはあなたに完全なUTF-8範囲の文字を与えます、そしてそれらは実際の文字に奇妙に似ているので、どの文字があなたに問題を与えているかを「見る」ことができます。私が投稿した例では、私のiPhoneがボックス化された疑問符としてレンダリングする6文字があります。
Shebuka

4
IMO、この素晴らしいツールは説明に非常に優れた「付加価値」である可能性がありますが、SO自体では答えとして適合しません(ページが廃止されている可能性もあるため)。とにかく、説明なしの-1はあまり建設的ではないことに同意します。
エイドリアンメア2017年

したがって、これは「良い、優れたutf-8サンプルテストデータ」です... IMO
Rondo


2

私の頭の上から:

0xffおよび0xfe

シングルハイビットバイト

ローバイト文字のマルチバイト表現-初期チェックを過ぎてヌルを密輸する良い方法

バイト順マーク-それらを無視しますか?

NFCとNFD

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.