2016-11-30 4 views
0

Angenommen, ich habe ein Formularelement, das so ziemlich jede vernünftige Zeichenfolge erlauben sollte, die etwas nennt (IE wie der Titel dieser Frage).Safe Unicode String/Name

Wie validiere ich, dass die Zeichenfolge vernünftig ist und nicht etwas Seltsames oder unsicheres? (Nehmen wir an, dass so etwas wie Unicode-Emoticons sinnvoll sind)

Überprüfung auf alle Escape-Zeichen wie Zeilenumbrüche, Form Feeds usw., ist natürlich gegeben. Dinge wie Länge sind jedoch schwieriger, da ein beschreibender englischer Name mit nur einem Zeichen sehr schwierig ist, aber auf Chinesisch trivial ist.

Es gibt ~ 31 Unicode-Klassen, welche sind sicher?

Wie sieht eine vollständige Regex- oder ähnliche Überprüfung in Javascript oder C# aus?

+0

Nur für Kontext, was ist es, dass Sie versuchen, es für sicher zu machen? Ist es sicher für das Einfügen in eine Datenbank oder für XSS oder nicht validierte Benutzereingaben? – gmiley

+0

Alles oben genannte. – Cine

+1

Gut, solange Sie parametrisierte Abfragen für Ihre SQL-Befehle verwenden, ist jede Eingabe gegen sql injection sicher. An diesem Punkt müssen Sie nur in Ihrer Datenbank angeben, dass die Spalte, in der Sie Daten speichern, Unicode ist. Wenn Sie Inhalte anzeigen, sollten Sie sicherstellen, dass Sie HTML-Codierungsverfahren verwenden, die in JavaScript sowie in den meisten serverseitigen Skriptsprachen verfügbar sind. – gmiley

Antwort

0

Wie bestätige ich, dass die Zeichenfolge vernünftig ist und nicht etwas Seltsames oder unsicheres?

Es ist nicht klar, was Sie mit 'unsicher' meinen. Wie @gmiley sagte, können Sie nicht durch Injektion von Eingaben vor Problemen wie XSS schützen; Dies ist ein Problem beim Ausgeben von Ausgaben.

Was 'angemessen' ein guter Ausgangspunkt wäre:

  • Wie Sie erwähnt, Steuerzeichen disallowing: U + 0000-U + 001F und U + 007F-U + 009F, minus Newline und vielleicht Tab, wenn Sie diese zulassen möchten.

  • Speziell für Webanwendungen, die Zeichen, die für die Verwendung in Markup 'ungeeignet sind, gemäß der unicode-xml Notiz. Dies verhindert Layout-Tricks wie das Rechts-nach-Links-Überschreiben.

  • Unicode-Normalisierung (String.Normalize in C#), zum Beispiel Normalform C die Codepunkte für die Kombination von Akzenten oder Normalform KC auch abflachen Seltsamkeiten wie fullwidth Text zu standardisieren, die Sie vielleicht oder vielleicht nicht wollen, zu tun, je Publikum.

  • Wenn Sie Zͪa̻͍lg̐ͦ͢oͬ̓ṯ̺ͮěͧ̚͞ẋ͕ṱ̢͖̩̮̆ͤ nicht mögen, möchten Sie vielleicht limiting consecutive combiners in Betracht ziehen.