Mamy więc ściągawkę XSS do testowania naszego filtrowania XSS - ale poza przykładową niegroźną stroną nie mogę znaleźć żadnych złych lub źle sformułowanych danych testowych, aby upewnić się, że mój kod UTF-8 poradzi sobie z nieprawidłowo działającymi danymi.
Gdzie mogę znaleźć dobre ... złe dane do przetestowania? Albo co to jest skomplikowana sekwencja znaków?
~𝘈Ḇ𝖢𝕯٤ḞԍНǏ𝙅ƘԸⲘ𝙉০Ρ𝗤Ɍ𝓢ȚЦ𝒱Ѡ𝓧ƳȤѧᖯć𝗱ễ𝑓𝙜Ⴙ𝞲𝑗𝒌ļṃʼnо𝞎𝒒ᵲꜱ𝙩ừ𝗏ŵ𝒙𝒚ź1234567890!@#$%^&*()-_=+[{]};:'",<.>/?
~ АḂ Ⲥ𝗗𝖤𝗙 ꞠꓧȊ𝐉𝜥ꓡ𝑀𝑵Ǭ𝙿𝑄Ŗ𝑆𝒯𝖴𝘝𝘞ꓫŸ𝜡ả𝘢ƀ𝖼ḋếᵮℊ𝙝 Ꭵ𝕛 кιṃ դ ⱺ𝓅𝘲𝕣𝖘ŧ𝑢ṽẉ𝘅 ყ ž1234567890! @ # $% ^ & * () -_ = + [{]}; : '", <.> /?~Ѧ𝙱ƇᗞΣℱԍҤ١𝔍К𝓛𝓜ƝȎ𝚸𝑄Ṛ𝓢ṮṺƲᏔꓫ𝚈𝚭𝜶Ꮟçძ𝑒𝖿𝗀ḧ𝗂𝐣ҝɭḿ𝕟𝐨𝝔𝕢ṛ𝓼тú𝔳ẃ⤬𝝲𝗓1234567890!@#$%^&*()-_=+[{]};:'",<.>/?
~ 𝖠Β𝒞𝘋𝙴𝓕ĢȞỈ𝕵ꓗʟ𝙼ℕ০𝚸𝗤 Հꓢ ṰǓⅤ𝔚 Ⲭ𝑌𝙕𝘢𝕤Odpowiedzi:
Sprawdź test obciążeniowy dekodera UTF-8 Markusa Kuhna
źródło
Zobacz także Skąd plik zawierający znaki chińskie wie, ile bajtów użyć na znak? - bez wątpienia są inne pytania SO, które również by pomogły.
W UTF-8 otrzymujesz następujące typy bajtów:
(Ostatnia linia wygląda tak, jakby miała czytać 0xF0..0xF7; jednak 21-bitowy zakres Unicode (U + 0000 - U + 10FFFF) oznacza, że maksymalna poprawna wartość to 0xF4; wartości 0xF5..0xF7 nie mogą wystąpić w ważny UTF-8.)
Sprawdzanie, czy dana sekwencja bajtów jest prawidłowa UTF-8 oznacza, że musisz pomyśleć o:
W prawidłowym UTF-8 bajty 0xF5..0xFF nie mogą wystąpić.
Sekwencje nie-minimalne
Istnieje wiele możliwych reprezentacji niektórych postaci. Na przykład znak Unicode U + 0000 (ASCII NUL) może być reprezentowany przez:
Jednak standard Unicode wyraźnie stwierdza, że ostatnie trzy alternatywy są niedopuszczalne, ponieważ nie są minimalne. Tak się składa, że bajty 0xC0 i 0xC1 nigdy nie mogą pojawić się w prawidłowym UTF-8, ponieważ jedyne znaki, które mogą być przez nie zakodowane, są minimalnie zakodowane jako znaki jednobajtowe z zakresu 0x00..0x7F.
Surogaty UTF-16
W Basic Multi-Lingual Plane (BMP) wartości Unicode U + D800 - U + DFFF są zarezerwowane dla surogatów UTF-16 i nie mogą pojawić się zakodowane w prawidłowym UTF-8. Gdyby były ważne w UTF-8 (co, podkreślam, nie są), to surogaty byłyby kodowane:
Złe dane
Twoje dane BAD powinny więc zawierać próbki naruszające te różne zalecenia.
Należy zauważyć, że znacznik kolejności bajtów (BOM) U + FEFF, inaczej spacja bez przerwy o zerowej szerokości (ZWNBSP), nie może pojawić się jako niezakodowany w UTF-8 - bajty 0xFF i 0xFE nie są dozwolone w prawidłowym UTF-8. Zakodowany ZWNBSP może pojawić się w pliku UTF-8 jako 0xEF 0xBB 0xBF, ale BOM jest całkowicie zbędny w UTF-8.
W Unicode jest również kilka znaków niebędących znakami . U + FFFE i U + FFFF to dwa takie nie-znaki (a ostatnie dwa punkty kodowe w każdej płaszczyźnie, U + 1FFFE, U + 1FFFF, U + 2FFFE, U + 2FFFF, ... U + 10FFFE, U + 10FFFF to inne ). Nie powinny one normalnie pojawiać się w danych Unicode do wymiany danych, ale mogą pojawiać się do użytku prywatnego. Zobacz link do często zadawanych pytań na temat Unicode, aby uzyskać wiele obskurnych szczegółów, w tym dość złożoną historię znaków niebędących znakami w Unicode. ( Sprostowanie nr 9: Wyjaśnienie dotyczące znaków niebędących postaciami , które zostało wydane w styczniu 2013 r., Robi to, co sugeruje jego tytuł - wyjaśnia znaczenie niebędących postaciami.)
źródło
Możesz skorzystać z tego poręcznego narzędzia online autorstwa Jeffreya Bergaminiego autorstwa aby przekonwertować dowolny tekst na naprawdę dziwny ciąg homoglifów UTF8.
Typowy
stać się takim:
źródło
Artykuł Wikipedii dotyczący UTF-8 zawiera dobre podsumowanie, które sekwencje bajtów są prawidłowe / nieprawidłowe. Kolejny artykuł, który warto przeczytać, to W3C I18N FAQ: Multilingual Forms .
źródło
Z czubka mojej głowy:
0xff i 0xfe
Pojedyncze bajty wysokobitowe
Wielobajtowa reprezentacja znaków małobajtowych - dobry sposób na przemycanie wartości zerowych poza wczesne sprawdzenia
Znaczniki kolejności bajtów - czy zamierzasz je zignorować?
NFC a NFD
źródło