Sven Rautenberg: Die neuen Umlaut-Domains und ihre Probleme

Beitrag lesen

Moin!

Also als regex:
^.+@.+..+$

Und fertig.

Sollte man nicht wenigstens abchecken, dass keine Steuerzeichen (<hex20) in der Adresse vorkommen? Denn abhängig davon, was man mit der Adresse macht, könnte das Vorkommen von Steuerzeichen doch eine Sicherheitslücke darstellen?

Woher willst du wissen, dass der String als ASCII daherkommt? :)

Abgesehen davon: Wenn man seine Daten ordentlich als Daten behandelt, sind jegliche Bytekombinationen kein Problem. Zum Speichern in eine Datenbank beispielsweise immer schon mysql_escape_string() verwenden, und gut ist.

Oder ist das auch eine Einschränkung? Bzw. absolute Paranoia?

Man muß betrachten, was man erreichen will. Will man wirklich die Prüfung auf absolute Einhaltung von Standards, hat man natürlich strengere Maßstäbe anzulegen, als wenn man nur dumme Eingabefehler abfangen will.

Die Aufgabe, die ich hier sehe, sind aber eben nur diese dummen Eingabefehler. Und sowas wird in der Regel bei solchen Programmen geprüft, die man einmal schreibt und dann nie wieder anfäßt, weil: Funktioniert ja.

Dass sich die Dinge aber ändern, beispielsweise der letzte Teil einer Domain nicht mehr nur 2 oder 3 Zeichen lang _ist_ (so war die real existierende Situation am Beginn des Internets), sondern laut Standard grundsätzlich beliebig lang sein _kann_, und dieses mit .info, .aero, .museum usw. auch eindrucksvoll demonstriert wurde, hat sich so ganz langsam herumgesprochen. Ebenso wie die Tatsache, dass "die Domain" (die Second-Level-Domain) nicht mindestens 3 Zeichen lang sein muß, sondern es auch zwei und ein Zeichen lange Domains gibt.

Kern meiner Aussage: Je stärker man die erlaubten Eingabemöglichkeiten einschränkt, desto sicherer muß man sich sein, dass man keinerlei erlaubte Eingabemöglichkeiten als falsch ausschließt, und desto aktiver muß man Veränderungen im Standard verfolgen, welche möglicherweise nachträglich bisher ungültige Eingabemöglichkeiten gültig macht.

Und da halte ich es einfach für am sinnvollsten, die geringstmöglichen noch sinnvollen Anforderungen zu stellen. Und die sind halt: Eine Mailadresse muß zwingend ein @ enthalten, und sie muß (sofern man lokale Hosts ausschließen will) nach dem @ mindestens einen Punkt enthalten für die Trennung von SLD und TLD.

Ich bin mir mit diesen Regeln hundertprozentig sicher, dass alles, was damit als falsch erkannt wird, garantiert keine Mailadresse ist. Dass von dem, was als gültig durchgelassen wird, ein Teil auch keine gültige Mailadresse ist, ist mir dabei bewußt. Aber die Aufgabe "nimm nur gültige Mailadressen" kann von einem RegEx niemals erfüllt werden.

- Sven Rautenberg

--
"Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)