Jadi kami memiliki lembar contekan XSS untuk menguji pemfilteran XSS kami - tetapi selain contoh halaman jinak, saya tidak dapat menemukan data pengujian yang jahat atau cacat untuk memastikan bahwa kode UTF-8 saya dapat menangani data yang tidak berfungsi dengan baik.
Di mana saya dapat menemukan beberapa data yang baik uh .. buruk untuk diuji? Atau apakah urutan karakter yang rumit itu?
~𝘈Ḇ𝖢𝕯٤ḞԍНǏ𝙅ƘԸⲘ𝙉০Ρ𝗤Ɍ𝓢ȚЦ𝒱Ѡ𝓧ƳȤѧᖯć𝗱ễ𝑓𝙜Ⴙ𝞲𝑗𝒌ļṃʼnо𝞎𝒒ᵲꜱ𝙩ừ𝗏ŵ𝒙𝒚ź1234567890!@#$%^&*()-_=+[{]};:'",<.>/?
~ АḂ Ⲥ𝗗𝖤𝗙 ꞠꓧȊ𝐉𝜥ꓡ𝑀𝑵Ǭ𝙿𝑄Ŗ𝑆𝒯𝖴𝘝𝘞ꓫŸ𝜡ả𝘢ƀ𝖼ḋếᵮℊ𝙝 Ꭵ𝕛 кιṃ դ ⱺ𝓅𝘲𝕣𝖘ŧ𝑢ṽẉ𝘅 ყ ž1234567890! @ # $% ^ & * () -_ = + [{]}; : '", <.> /?~Ѧ𝙱ƇᗞΣℱԍҤ١𝔍К𝓛𝓜ƝȎ𝚸𝑄Ṛ𝓢ṮṺƲᏔꓫ𝚈𝚭𝜶Ꮟçძ𝑒𝖿𝗀ḧ𝗂𝐣ҝɭḿ𝕟𝐨𝝔𝕢ṛ𝓼тú𝔳ẃ⤬𝝲𝗓1234567890!@#$%^&*()-_=+[{]};:'",<.>/?
~ 𝖠Β𝒞𝘋𝙴𝓕ĢȞỈ𝕵ꓗʟ𝙼ℕ০𝚸𝗤 Հꓢ ṰǓⅤ𝔚 Ⲭ𝑌𝙕𝘢𝕤Jawaban:
Lihat uji stres dekoder UTF-8 Markus Kuhn
sumber
Lihat juga Bagaimana file dengan karakter Cina mengetahui berapa banyak byte yang digunakan per karakter? - tidak diragukan lagi, ada pertanyaan SO lain yang juga akan membantu.
Dalam UTF-8, Anda mendapatkan jenis byte berikut:
(Baris terakhir terlihat seolah-olah membaca 0xF0..0xF7; namun, kisaran 21-bit Unicode (U + 0000 - U + 10FFFF) berarti bahwa nilai valid maksimum adalah 0xF4; nilai 0xF5..0xF7 tidak dapat terjadi di UTF-8 yang valid.)
Melihat apakah urutan byte tertentu adalah UTF-8 yang valid berarti Anda perlu memikirkan tentang:
Dalam UTF-8 yang valid, byte 0xF5..0xFF tidak dapat terjadi.
Urutan non-minimal
Ada beberapa kemungkinan representasi untuk beberapa karakter. Misalnya, karakter Unicode U + 0000 (ASCII NUL) dapat diwakili oleh:
Namun, standar Unicode dengan jelas menyatakan bahwa tiga alternatif terakhir tidak dapat diterima karena tidak minimal. Kebetulan byte 0xC0 dan 0xC1 tidak pernah dapat muncul dalam UTF-8 yang valid karena satu-satunya karakter yang dapat dikodekan olehnya minimal dikodekan sebagai karakter byte tunggal dalam kisaran 0x00..0x7F.
Pengganti UTF-16
Dalam Basic Multi-lingual Plane (BMP), nilai Unicode U + D800 - U + DFFF dicadangkan untuk pengganti UTF-16 dan tidak dapat muncul dikodekan dalam UTF-8 yang valid. Jika mereka valid dalam UTF-8 (yang, saya tekankan, mereka tidak valid), maka pengganti akan dikodekan:
Data Buruk
Jadi, data BAD Anda harus berisi contoh yang melanggar berbagai resep ini.
Perhatikan bahwa byte-order mark (BOM) U + FEFF, alias zero-width no-break space (ZWNBSP), tidak dapat muncul tanpa kode dalam UTF-8 - byte 0xFF dan 0xFE tidak diizinkan dalam UTF-8 yang valid. ZWNBSP yang dienkode dapat muncul dalam file UTF-8 sebagai 0xEF 0xBB 0xBF, tetapi BOM benar-benar berlebihan dalam UTF-8.
Ada juga beberapa nonkarakter di Unicode. U + FFFE dan U + FFFF adalah dua karakter nonkarakter (dan dua titik kode terakhir di setiap bidang, U + 1FFFE, U + 1FFFF, U + 2FFFE, U + 2FFFF, ... U + 10FFFE, U + 10FFFF adalah lainnya ). Ini biasanya tidak muncul dalam data Unicode untuk pertukaran data, tetapi dapat muncul untuk penggunaan pribadi. Lihat tautan FAQ Unicode untuk banyak detail kotor, termasuk riwayat nonkarakter yang agak rumit di Unicode. ( Corrigendum # 9: Clarification About Noncharacters , yang dirilis pada Januari 2013, melakukan apa yang disarankan oleh judulnya - menjelaskan arti non-karakter.)
sumber
Anda dapat menggunakan alat online praktis dari Jeffrey Bergamini ini untuk mengubah teks apa pun menjadi string UTF8 Homoglyph yang sangat aneh.
Sebuah tipikal
menjadi seperti ini:
sumber
Artikel UTF-8 Wikipedia memiliki ringkasan yang baik tentang urutan byte yang valid / tidak valid. Artikel lain yang layak dibaca adalah FAQ W3C I18N: Formulir Multibahasa .
sumber
Dari atas kepala saya:
0xff dan 0xfe
Satu byte bit tinggi
Representasi multi-byte dari karakter byte rendah - Cara yang baik untuk menyelundupkan null setelah pemeriksaan awal
Tanda urutan byte - Apakah Anda akan mengabaikannya?
NFC vs. NFD
sumber