Wir haben also das XSS-Spickzettel , um unsere XSS-Filterung zu testen - aber abgesehen von einer gutartigen Beispielseite kann ich keine bösen oder fehlerhaften Testdaten finden, um sicherzustellen, dass mein UTF-8-Code fehlerhafte Daten verarbeiten kann.
Wo finde ich gute und schlechte Daten zum Testen? Oder was ist eine knifflige Folge von Zeichen?
~𝘈Ḇ𝖢𝕯٤ḞԍНǏ𝙅ƘԸⲘ𝙉০Ρ𝗤Ɍ𝓢ȚЦ𝒱Ѡ𝓧ƳȤѧᖯć𝗱ễ𝑓𝙜Ⴙ𝞲𝑗𝒌ļṃʼnо𝞎𝒒ᵲꜱ𝙩ừ𝗏ŵ𝒙𝒚ź1234567890!@#$%^&*()-_=+[{]};:'",<.>/?
~ : '", <.> /?~Ѧ𝙱ƇᗞΣℱԍҤ١𝔍К𝓛𝓜ƝȎ𝚸𝑄Ṛ𝓢ṮṺƲᏔꓫ𝚈𝚭𝜶Ꮟçძ𝑒𝖿𝗀ḧ𝗂𝐣ҝɭḿ𝕟𝐨𝝔𝕢ṛ𝓼тú𝔳ẃ⤬𝝲𝗓1234567890!@#$%^&*()-_=+[{]};:'",<.>/?
~ 𝖠Β𝒞𝘋𝙴𝓕ĢȞỈ𝕵ꓗʟ𝙼ℕ০𝚸𝗤 Հꓢ ṰǓⅤ𝔚 Ⲭ𝑌𝙕𝘢𝕤Antworten:
Schauen Sie sich Markus Kuhns UTF-8-Decoder-Stresstest an
quelle
Siehe auch Woher weiß eine Datei mit chinesischen Zeichen, wie viele Bytes pro Zeichen verwendet werden sollen? - Ohne Zweifel gibt es andere SO-Fragen, die ebenfalls helfen würden.
In UTF-8 erhalten Sie die folgenden Arten von Bytes:
(Die letzte Zeile sieht so aus, als ob sie 0xF0..0xF7 lauten sollte. Der 21-Bit-Bereich von Unicode (U + 0000 - U + 10FFFF) bedeutet jedoch, dass der maximal gültige Wert 0xF4 ist. Werte 0xF5..0xF7 können in nicht auftreten gültiges UTF-8.)
Wenn Sie prüfen, ob eine bestimmte Folge von Bytes für UTF-8 gültig ist, müssen Sie über Folgendes nachdenken:
In gültigem UTF-8 können die Bytes 0xF5..0xFF nicht vorkommen.
Nicht minimale Sequenzen
Für einige Zeichen gibt es mehrere mögliche Darstellungen. Beispielsweise könnte das Unicode-Zeichen U + 0000 (ASCII NUL) dargestellt werden durch:
Der Unicode-Standard besagt jedoch eindeutig, dass die letzten drei Alternativen nicht akzeptabel sind, da sie nicht minimal sind. Es kommt daher vor, dass die Bytes 0xC0 und 0xC1 niemals in einem gültigen UTF-8 erscheinen können, da die einzigen Zeichen, die von diesen codiert werden könnten, minimal als Einzelbytezeichen im Bereich 0x00..0x7F codiert sind.
UTF-16-Ersatz
Innerhalb der Basic Multi-Lingual Plane (BMP) sind die Unicode-Werte U + D800 - U + DFFF für UTF-16-Surrogate reserviert und können nicht in gültigem UTF-8 codiert erscheinen. Wenn sie in UTF-8 gültig wären (was ich nicht betone), würden die Surrogate codiert:
Schlechte Daten
Daher sollten Ihre BAD-Daten Proben enthalten, die gegen diese verschiedenen Vorschriften verstoßen.
Beachten Sie, dass ein Byte-Order-Mark (BOM) U + FEFF, auch bekannt als No-Break-Space mit Nullbreite (ZWNBSP), in UTF-8 nicht unverschlüsselt erscheinen kann - die Bytes 0xFF und 0xFE sind in gültigem UTF-8 nicht zulässig. Ein codierter ZWNBSP kann in einer UTF-8-Datei als 0xEF 0xBB 0xBF angezeigt werden, aber die Stückliste ist in UTF-8 völlig überflüssig.
Es gibt auch einige Nicht- Zeichen in Unicode. U + FFFE und U + FFFF sind zwei solche Nichtzeichen (und die letzten beiden Codepunkte in jeder Ebene, U + 1FFFE, U + 1FFFF, U + 2FFFE, U + 2FFFF, ... U + 10FFFE, U + 10FFFF sind andere ). Diese sollten normalerweise nicht in Unicode-Daten für den Datenaustausch enthalten sein, sondern können im privaten Gebrauch angezeigt werden. Unter dem Unicode-FAQ-Link finden Sie viele schmutzige Details, einschließlich der ziemlich komplexen Geschichte von Nicht-Zeichen in Unicode. ( Berichtigung Nr. 9: Klarstellung über Nichtzeichen , die im Januar 2013 veröffentlicht wurde, macht das, was der Titel andeutet - verdeutlicht die Bedeutung von Nichtzeichen .)
quelle
Mit diesem praktischen Online-Tool von Jeffrey Bergamini können Sie jeden Text in eine wirklich seltsame UTF8-Folge von Homoglyphen konvertieren.
Ein typischer
so werden:
quelle
Der UTF-8-Artikel von Wikipedia enthält eine gute Zusammenfassung der gültigen / ungültigen Byte-Sequenzen. Ein weiterer lesenswerter Artikel ist W3C I18N FAQ: Mehrsprachige Formulare .
quelle
Aus dem Kopf:
0xff und 0xfe
Einzelne High-Bit-Bytes
Multi-Byte-Darstellung von Low-Byte-Zeichen - Eine gute Möglichkeit, Nullen nach frühen Überprüfungen zu schmuggeln
Byte-Order-Markierungen - Werden Sie sie ignorieren?
NFC gegen NFD
quelle