Portanto, temos a folha de dicas XSS para testar nossa filtragem XSS - mas, além de uma página benigna de exemplo, não consigo encontrar nenhum dado de teste maligno ou malformado para ter certeza de que meu código UTF-8 pode lidar com dados de comportamento incorreto.
Onde posso encontrar alguns dados uh .. ruins para testar? Ou o que é uma sequência complicada de caracteres?
~𝘈Ḇ𝖢𝕯٤ḞԍНǏ𝙅ƘԸⲘ𝙉০Ρ𝗤Ɍ𝓢ȚЦ𝒱Ѡ𝓧ƳȤѧᖯć𝗱ễ𝑓𝙜Ⴙ𝞲𝑗𝒌ļṃʼnо𝞎𝒒ᵲꜱ𝙩ừ𝗏ŵ𝒙𝒚ź1234567890!@#$%^&*()-_=+[{]};:'",<.>/?
~ АḂ Ⲥ𝗗𝖤𝗙 ꞠꓧȊ𝐉𝜥ꓡ𝑀𝑵Ǭ𝙿𝑄Ŗ𝑆𝒯𝖴𝘝𝘞ꓫŸ𝜡ả𝘢ƀ𝖼ḋếᵮℊ𝙝 Ꭵ𝕛 кιṃ դ ⱺ𝓅𝘲𝕣𝖘ŧ𝑢ṽẉ𝘅 ყ ž1234567890! @ # $% ^ & * () -_ = + [{]}; : '", <.> /?~Ѧ𝙱ƇᗞΣℱԍҤ١𝔍К𝓛𝓜ƝȎ𝚸𝑄Ṛ𝓢ṮṺƲᏔꓫ𝚈𝚭𝜶Ꮟçძ𝑒𝖿𝗀ḧ𝗂𝐣ҝɭḿ𝕟𝐨𝝔𝕢ṛ𝓼тú𝔳ẃ⤬𝝲𝗓1234567890!@#$%^&*()-_=+[{]};:'",<.>/?
~ 𝖠Β𝒞𝘋𝙴𝓕ĢȞỈ𝕵ꓗʟ𝙼ℕ০𝚸𝗤 Հꓢ ṰǓⅤ𝔚 Ⲭ𝑌𝙕𝘢𝕤Respostas:
Confira o teste de estresse do decodificador UTF-8 de Markus Kuhn
fonte
Consulte também Como um arquivo com caracteres chineses sabe quantos bytes usar por caractere? - sem dúvida, há outras perguntas do SO que também ajudariam.
Em UTF-8, você obtém os seguintes tipos de bytes:
(A última linha parece que deveria ser 0xF0..0xF7; no entanto, o intervalo de 21 bits do Unicode (U + 0000 - U + 10FFFF) significa que o valor máximo válido é 0xF4; os valores 0xF5..0xF7 não podem ocorrer em UTF-8 válido.)
Verificar se uma determinada sequência de bytes é UTF-8 válida significa que você precisa pensar sobre:
Em UTF-8 válido, os bytes 0xF5..0xFF não podem ocorrer.
Sequências não mínimas
Existem várias representações possíveis para alguns personagens. Por exemplo, o caractere Unicode U + 0000 (ASCII NUL) pode ser representado por:
No entanto, o padrão Unicode afirma claramente que as três últimas alternativas não são aceitáveis porque não são mínimas. Acontece que os bytes 0xC0 e 0xC1 nunca podem aparecer em UTF-8 válido porque os únicos caracteres que poderiam ser codificados por eles são minimamente codificados como caracteres de byte único no intervalo 0x00..0x7F.
UTF-16 Surrogates
Dentro do plano multilingue básico (BMP), os valores Unicode U + D800 - U + DFFF são reservados para substitutos UTF-16 e não podem aparecer codificados em UTF-8 válido. Se fossem válidos em UTF-8 (o que, enfatizo, não são), os substitutos seriam codificados:
Dados ruins
Portanto, seus dados BAD devem conter amostras que violem essas várias prescrições.
Observe que uma marca de ordem de byte (BOM) U + FEFF, também conhecida como espaço no-break de largura zero (ZWNBSP), não pode aparecer sem codificação em UTF-8 - os bytes 0xFF e 0xFE não são permitidos em UTF-8 válido. Um ZWNBSP codificado pode aparecer em um arquivo UTF-8 como 0xEF 0xBB 0xBF, mas o BOM é completamente supérfluo em UTF-8.
Existem também alguns não caracteres em Unicode. U + FFFE e U + FFFF são dois desses não-caracteres (e os últimos dois pontos de código em cada plano, U + 1FFFE, U + 1FFFF, U + 2FFFE, U + 2FFFF, ... U + 10FFFE, U + 10FFFF são outros ) Normalmente, eles não devem aparecer em dados Unicode para troca de dados, mas podem aparecer em uso privado. Veja o link de FAQ do Unicode para muitos detalhes sórdidos, incluindo a história bastante complexa de não caracteres em Unicode. ( Corrigenda nº 9: Esclarecimento sobre não caracteres , lançada em janeiro de 2013, faz o que o título sugere - esclarece o significado dos não caracteres.)
fonte
Você pode usar esta ferramenta online útil de Jeffrey Bergamini para converter qualquer texto em uma string UTF8 realmente estranha de homoglifos.
Um típico
fique assim:
fonte
O artigo UTF-8 da Wikipedia tem um bom resumo de quais sequências de bytes são válidas / inválidas. Outro artigo que vale a pena ler é W3C I18N FAQ: Multilingual Forms .
fonte
Em cima da minha cabeça:
0xff e 0xfe
Bytes únicos de alto bit
Representação multibyte de caracteres de byte baixo - uma boa maneira de contrabandear nulos após verificações iniciais
Marcas de ordem de bytes - você vai ignorá-las?
NFC vs. NFD
fonte