Zustandsforschung

Mit offenen Augen durch die Welt

Nackt-Scanner und so

Nach dem missglückten Anschlag auf den Northwest-Airlines-Flug 253 am 25. Dezember geht ja gerade die Diskussion um die Nacktscanner los. Ob die Dinger jetzt tatsächlich die Sicherheit erhöhen oder ob es sich hier nur um “unverhältnismäßige drakonische Maßnahmen” handelt, möchte ich hier gar nicht diskutieren.

Was mir aber aufgefallen ist, ist dass irgendwie automatisch davon ausgegangen wird, Terroristen könnten nur Flugzeuge in die Luft sprengen. 2005 wurde in London die U-Bahn gesprengt und 2006 wurde ja auch in Deutschland versucht, einen Anschlag auf zwei Regionalzüge zu verüben. Wird da mittlerweile irgendwie kontrolliert wer da einsteigt und was die Leute so dabei haben? Klar, es gibt jetzt mehr Kameras, aber damit kann man nur hinterher feststellen, wer’s gewesen ist und nicht vorher irgendwas verhindern. Mit den neuen Sicherheitsmaßnahmen ist Fliegen dann vielleicht viel sicherer, aber das nützt mir auch nix, wenn gerade meine Bahn explodiert.

Das Problem ist, dass man mit immer mehr Kontrollen nicht wirklich Anschläge verhindern kann – es gibt so viele Möglichkeiten, Anschläge zu verüben und man kann halt nicht überall alles kontrollieren. Die Terroristen sind nicht so dumm wie man glaubt und wenn das Fliegen tatsächlich hundertprozentig abgesichert ist, weil irgendwann alle nackt fliegen müssen und vorher ein Abführmittel bekommen (nur um sicher zu gehen), dann wird halt was anderes gesprengt. Wie wär’s mit einem ICE? Eine Bombe in einem Einkaufszentrum an einem Adventssamstag? Man muss nicht wirklich lange nachdenken, dann kommt man auf jede Menge Möglichkeiten Terroranschläge zu verüben ohne auch nur in die Nähe eines Flugzeuges gehen zu müssen.

Also kann mir jemand erklären, warum man sich gerade bei den Flugzeugen so auf die Sicherheit fixiert?

^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$

Das immer wieder gerne angeführte Standardbeispiel für die Anwendung von Regular Expressions ist die E-Mail-Validierung. Mittels eines mehr oder weniger komplizierten Ausdrucks soll dabei geprüft werden, ob die von einem Benutzer in ein Webformular eingegebene E-Mail-Adresse den Regeln für eine gültige Adresse genügt. Dabei reichen die Varianten von eher simplen wie z.B.

^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$

über komplizierte wie

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

bis hin zu solchen, die man schon eher als völlig irre bezeichnen könnte:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

die allesamt darauf abzielen eine mehr oder weniger genaue Abdeckung der in RFC 2822 – Internet Message Format definierten Vorgabe zu erfüllen.

Die Frage ist doch aber – warum tut man so etwas? Klar, man möchte dass der Benutzer eine gültige E-Mail-Adresse (im besten Fall seine eigene) in ein Formular einträgt. Aber dient eine Validierung der Gültigkeit mittels Regular Expressions wirklich diesem Zweck?

Mit fallen zwei Szenarien ein, wo ein Benutzer eine ungültige E-Mail-Adresse eingibt: Entweder er macht es unabsichtlich, wenn er sich vertippt oder so. Oder er macht es absichtlich, um irgendeine Zwangsregistrierung zu umgehen. In beiden Fällen greift die Validierung über Regular Expression nicht wirklich.

Erster Fall – Versehen: Wenn ich mich beim Eingeben der Mailadresse vertippe, dann dreht sich das doch meist um einzelne Buchstaben – dass ich das “@” vergesse kommt eher selten vor. D.h. ich kann mich leicht so vertippen, dass ich zwar eine formal gültige Adresse eingebe, die aber leider trotzdem falsch ist (z.B. Buchstabendreher im Vornamen).

Zweiter Fall – Absicht: Ich kann mir leicht eine lustige Mailadresse ausdenken, die bei der Validierung zwar durchgeht, aber völlig frei erfunden ist. Die Mailadresse hab.ich@erfunden.de erfüllt zwar die Validierung – ist aber deshalb noch lange keine gültige E-Mail-Adresse.

Eine mögliche Lösung könnte daher sein, die Mailadresse über Double Opt-in zu validieren, also dass man dem Benutzer eine Mail an diese Adresse schickt, die einen Link enthält, den der Benutzer klicken muss, um seine E-Mail-Adresse zu bestätigen. Aber auch diese Variante schützt nicht gegen mutwillige Falscheingabe – es gibt immer noch Spamgourmet, Mailinator und ähnliche Sites, die Wegwerf-E-Mail-Adressen bereitstellen.

Fazit: Mit Regular Expressions kann man zwar den Benutzer bei der Eingabe etwas unterstützen, aber der Weisheit letzter Schluss sind sie für die E-Mail-Validierung deshalb noch lange nicht. Und gerade deshalb braucht man sich auch nicht verkünsteln, um zu beweisen, wie toll man Regular Expressions (kopieren) kann.

Bohemian Muppet-Rhapsody

Das Video hier macht im Moment die Runde im Netz und weil es schlicht und ergreifend genial ist, möchte ich es euch nicht vorenthalten:

[via Thoughts written in Flame]

Gib ma Zeitung

Hier ist ein richtig schöner Werbespot für die taz (aber eigentlich eher gegen die BILD) den ihr euch auf keinen Fall entgehen lassen solltet:

[via xFUCKERx]

no nohup – no copy

Die Unix-Gurus unter euch werden jetzt zwar wahrscheinlich sagen: Is ja klar, aber ich bin kein Unix-Guru und mir war’s nicht klar:

Wenn man eine Unix-Konsole schließt, werden alle Prozesse gestoppt, dir darin gestartet wurden, selbst dann wenn der Prozess mit & im Hintergrund gestartet wurde. Allerdings – und das ist das fiese – offenbar nicht sofort.

Geahnt hab’ ich sowas ja schon als ich gestern Abend meinen Copy-Befehl angestoßen habe und sicherheitshalber nach dem Schließen meines einen PuTTY im anderen PuTTY nochmal geschaut ob der Prozess noch da ist.

Direkt danach war er noch da.

2 Stunden später war er auch noch da.

Nur irgendwann im Laufe der Nacht hat er sich verabschiedet. Also alles nochmal von vorne :-(

Jetzt habe ich mit einem Unix-Guru gesprochen und der hat mir erklärt, dann man den Befehlen ein nohup vornedran stellen muss damit sie auch wirklich so gestartet werden, dass sie im Hintergrund laufen und nicht abhängig von der Shell sind. Alternativ hätte ich auch – wie ich jetzt recherchiert habe – den Prozess nachträglich auch mit einem disown in den Hintergrund schicken können.

Also entweder gleich mit nohup starten oder – wenn der Prozess schon läuft – erst STRG-Z, dann bg und abschließend ein disown.