因此,我们有XSS小抄来测试我们的XSS过滤-但除此之外的例子良性页面我无法找到任何邪恶或畸形的测试数据,以确保我的UTF-8编码可以处理missbehaving数据。
我在哪里可以找到一些好的呃..坏的数据来进行测试? 或什么是字符的一个棘手的顺序?
因此,我们有XSS小抄来测试我们的XSS过滤-但除此之外的例子良性页面我无法找到任何邪恶或畸形的测试数据,以确保我的UTF-8编码可以处理missbehaving数据。
我在哪里可以找到一些好的呃..坏的数据来进行测试? 或什么是字符的一个棘手的顺序?
退房马库斯·库恩的UTF-8解码器压力测试
另请参阅如何与中国字符的文件知道有多少字节的每个字符使用? - 毫无疑问,还有其他的做题,这也将帮助。
在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的(U + 0000的21位范围 - 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标准中明确指出,最后三个替代方案是不能接受的,因为他们不是最小的。 恰巧,字节将0xC0和0xC1可能永远不会出现在合法的UTF-8,因为这可以通过这些编码的字符只有最低限度的编码为0x00..0x7F范围内的单字节字符。
内基本多语种平面(BMP),则Unicode值U + D800 - U + DFFF保留用于UTF-16的替代物,并且不能在有效UTF-8编码的出现。 如果他们在UTF-8(我强调这,他们都没有)是有效的,那么代理人会被编码:
所以,你的坏数据应该包含样本违反这些不同的处方。
请注意,一个字节顺序标记(BOM)U + FEFF,又名零宽度无间断间隔(ZWNBSP),不能出现未编码的UTF-8 - 字节0xFF和0xFE的在有效UTF-8是不允许的。 的编码ZWNBSP可以出现在UTF-8文件作为0xEF为0xBB为0xBF,但BOM完全是多余的在UTF-8。
也有一些noncharacters以Unicode。 U + FFFE和U + FFFF两个这样的noncharacters(和各平面中最后两个代码点,U + 1FFFE,U + 1FFFF,U + 2FFFE,U + 2FFFF,... U + 10FFFE,U + 10FFFF是别人)。 这些通常不应出现在用于数据交换的Unicode数据,但可以在私人使用出现。 见Unicode的FAQ链接大量的肮脏细节,包括以Unicode noncharacters的相当复杂的历史。 ( 更正#9:澄清Noncharacters ,这是在2013年1月发布的,做什么标题暗示-明确了非字符的含义。)
您可以使用由杰弗里·贝尔加米尼这个方便的在线工具 ,以任何文本转换成同形字的一个非常奇怪的UTF8字符串。
典型
Lorem存有悲坐阿梅德,consectetur adipiscing ELIT,sed的tempor和活力,使劳动和悲伤,一些重要的事情要做eiusmod。
变成了这个样子:
Ḽơᶉëᶆȋṕšᶙṁḍỡḽǭᵳʂǐťӓṁệẗ,ĉṓɲṩḙċťᶒţûɾấɖḯƥĭṩčįɳġḝłįʈ,şếᶑᶁⱺẽḭŭŝḿꝋďṫĕᶆᶈṓɍỉñḉīḑȋᵭṵńťUTḹẩḇőꝛếéȶđꝍꞎôꝛȇᵯáꞡᶇāąⱡîɋṹẵ。
维基百科的UTF-8文章有什么字节序列有效/无效的一个很好的总结。 这是值得一读的另一篇文章是W3C国际化常见问题:多语言形式 。
关闭我的头顶:
0xFF和0xFE的
单高位字节
低字节字符的多字节表示 - 空走私过去早期检查的好方法
字节顺序标记 - 你会忽略他们?
NFC与NFD