Archive for 2011
Auf Warnings, Notices und sogar Fatal Errors reagieren
In besonders kritischen Scripten baue ich gern zur Sicherheit noch eine erweiterte Log-Funktion ein, die auch noch aufgerufen wird bei einem FATAL ERROR oder bei einem exit() oder die() in einer Fremdbibliothek (pfui). Man kann so auch beim Vorkommen einer Notice das Script beenden, das kann manchmal sehr sinnvoll sein. Natürlich kann man mit Hilfe der error_log Einstellung in der php.ini und einem error_reporting „E_ALL^E_STRICT“ diese Fehler auch wegloggen, aber man ist nicht flexibel wenn man im Code darauf reagieren möchte. Beispielsweise könnte es sein dass bei einem FATAL ERROR noch etwas aufzuräumen ist, damit kein Müll hinterlassen wird.
Nehmen wir folgendes Beispiel:
<?php register_shutdown_function('shutdownFunction'); function shutDownFunction() { $error = error_get_last(); if ($error['type'] == 1) { // log error to syslog, send email or sms, this should not happen! } } echo nonExistingFunction();
Bei sauberem Code sollte das natürlich nicht passieren. Aber es gibt Situationen in denen ein Fatal Error passieren kann, wenn man beispielsweise eine Funktion aufruft mittels call_user_func() ohne eine vorherige is_callable() Prüfung, oder oder.
OK, nächstes Beispiel:
Passwortmythen oder „Was Du schon immer über Passwörter wusstest, aber nie zu sagen wagtest“
Gastartikel von Oliver Sperke.
Ich bin 34 Jahre alt und seit 10 Jahren selbständiger Webentwickler. Mein Fokus liegt dabei auf der Erstellung, Beratung und Optimierung in den Bereichen High Performance, Usability und Sicherheit in den gängisten Internetsprachen: PHP, HTML, Javascript und CSS.
Was Du vor dem Lesen wissen solltest
Die Sicherheit eines Passwortes ergibt sich aus dem verwendetem Zeichensatz und der Länge des Passwortes. Besteht ein Passwort nur aus den Ziffern 0 bis 9, hat der Zeichensatz eine Länge von 10. Besteht ein Passwort aus maximal 8 Ziffern, ergibt sich eine Anzahl möglicher Passwörter von 10^8+10^7+10^6+10^5+10^4+10^3+10^2+10^1 oder ~ 111,11 Mio. Möglichkeiten. In den meisten Erklärungen steht übrigens nur 10^8, allerdings gilt das nur, wenn ein Angreifer die Länge des Passwortes kennt. Ansonsten muss er nämlich alle Möglichkeiten ausprobieren, d. h. 0, 1, 2…01, 02, usw bis 99999999. Werden zusätzlich Kleinbuchstaben (also 0-9, a-z, äöüß) verwendet, ergibt sich ein „Schlüsselraum“, d. h. die mögliche Anzahl Passwörter von 40^8+40^7+…+40^1, also 6.72 Billionen Möglichkeiten usw.
Mythos: Ein Passwort mit mindestens 8 Zeichen ist sicher
Diesen Satz lese ich seit 10 Jahren mindestens dreimal im Jahr, nur vor 10 Jahren arbeiteten die schnellsten Heimcomputer in etwa auf dem Niveau eines heutigen Smartphones. Innerhalb dieser 10 Jahre hat sich die Computerwelt rasend schnell verändert. Auch durch das „pöse Internetz“, in dem viele Menschen ihre Ideen und ihr Wissen verknüpfen können. Während damals die wenigen Hochleistungsrechner in den Geheimdienstzentralen und IBM Laboren standen, gibt es heute völlig andere Methoden, um ein hohes Maß an Computerleistung zu erreichen. Diese reichen von der Nutzung der kompletten Hardware inkl. Grafikkarte, über Botnetze bis hin zu mietbaren Cloudlösungen.
Moderne Systeme erreichen dadurch heute weit höhere Werte beim Erraten („Brute Force“) von Passwörtern als damals. Vergleichsweise neue Techniken wie „Rainbow Tables“, die es damals einfach noch nicht gab verschärfen die Situation. Der Schlüsselraum von 8 Zeichen mit einem Zeichensatz von 102 Zeichen kann auf einem handelsüblichem Supercomputer innerhalb weniger Stunden durchprobiert werden. Das ist kein Puffer, auf den man sich verlassen sollte. Im Jahr 2011 sollte man diesen Standard endlich auf 12 Zeichen anheben, zumindest bis zum Jahr 2020.
Mythos: Ein drei Monate altes Passwort ist unsicher
Gewinner der Verlosung zum zweiten Geburtstag
So, endlich habe ich Zeit die Gewinner der Verlosung preiszugeben, so ein Urlaub ist echt stressig, danach hat man immer so viel nachzuholen, unglaublich.
Zuerst möchte ich mich nochmals bei allen Firmen die Preise zur Verfügung gestellt haben bedanken!
Dann wollen wir uns anschauen wie die Gewinner zustande gekommen sind. Der folgende SQL Query hat die Gewinner-Reihenfolge ermittelt:
SELECT comment_author, comment_author_email, SHA1(CONCAT(comment_author_email, 'Zweiter Geburtstag')) as hash FROM wp_comments WHERE comment_post_ID = 2728 AND comment_author != 'Michael Kliewe' AND comment_date < '2011-07-05 00:00:00' AND comment_author_email != '' GROUP BY comment_author_email ORDER BY hash
Zu jedem Kommentar wurde also ein Hash generiert, und dann alphabetisch sortiert, derjenige mit dem „kleinsten Hash“ gewinnt. Das führt uns zu folgender Tabelle:
Urlaub
Damit ihr euch nicht wundert wenn in den nächsten 2 Wochen keine neuen Artikel erscheinen: Ich werde heute in den Urlaub nach Norwegen aufbrechen und 2 Wochen internet-abstinent leben.
Aber ihr habt während dieser Zeit mindestens 2 Aufgaben: Macht mit beim Gewinnspiel zum Geburtstag falls ihr noch nicht teilgenommen habt, und postet hier unter diesen Artikel alle interessanten Links innerhalb der nächsten 2 Wochen, die ich dann lesen kann bei meiner Rückkehr, also diesmal eine Art „Crowd-Lesepool“.
Und wenn ihr dann immer noch Langeweile habt schreibt ihr einen kleinen Gastartikel, den ich dann hier veröffentlichen werde, auch wenn es nur 10 Sätze sind, Gedanken, Neuigkeiten, Erklärungen, egal was. Das wäre doch mal was wenn wir hier ein dutzend Gastartikel zusammenbekommen würden! Einfach an schicken!
Bis die Tage!
Transparenz erhöhen bei einem Webprojekt
Ich habe eine interessante Anfrage erhalten, und ich bin mir nicht ganz sicher wie man das Problem am besten lösen kann. Vielleicht könnt ihr ja einige Tipps geben, was man da machen kann.
Die Situation ist folgende: Der Auftraggeber hat ein Webseitenprojekt in Auftrag gegeben bei einer Internetagentur, aus Mangel an Wissen über IT-Projekte wurde der Vertrag nicht besonders straff gestaltet, viele Dinge wurden nicht spezifiziert, der Hauptgegenstand war ein Click-Dummy und einige kleine Listen mit Dingen, die umgesetzt werden sollen. Es wurde ebenso kein Zeitplan/Meilensteine festgelegt, mündlich wurden Versprechungen wie „Ende April ist es fertig“ gemacht. Nun ist es Mitte Juni, die öffentlich sichtbare Webseite ist unter einer Testdomain ansehbar (ca. 15 Seiten mit 2-3 Formularen und etwas Javascript). Der HTML/CSS/Javascript-Code sieht soweit gut aus. Mehr kann man allerdings noch nicht sehen.
Zum Projekt gehört auch ein „eingeloggter Bereich“ sowie eine Anbindung an einen Zahlungsdienstleister und an ein Transportunternehmen, und die Internetagentur hält den Auftraggeber nun seit mehreren Wochen hin, dass der Rest der Webseite nun noch nicht fertig ist da die Schnittstellen noch nicht fertig sind. Da nichts im Vertrag festgelegt ist gibt es Aussagen der Internetagentur wie „Da hätten Sie sich drum kümmern müssen dass die Schnittstelle bei den Dienstleistern eingerichtet wird“, und es wird versucht, Geld nachzufordern. Die Spannung und der Ärger steigt also langsam an.
Und nun die Frage: Was kann der Auftraggeber machen, um die Webseite nun endlich fertig zu bekommen, bzw. erstmal herauszufinden, wie weit denn nun der Fortschritt ist? Hätte die Internetagentur auch zum eigenen Schutz auf mehr Details und einen strafferen Vertrag bestehen müssen? Kann man nachträglich noch einen verbindlichen Zeitplan festlegen? Kann der Auftraggeber nun irgendwie Transparenz erhalten und Zwischenergebnisse der Schnittstellen und des Admin-Bereichs fordern, oder hat er nur ein Recht auf das Endergebnis, das „irgendwann geliefert wird“? Was würdet ihr tun?