Passwörter mit Salz würzen

Kleiner Exkurs für Newcomer-Techies :)

Wir alle wissen: Passwörter gehören nicht im Klartext auf den Server. Auch wenn zuerst einer Zugriff bekommen muss, hat ers einmal geschafft hat er so auch gleich alle Passwörter zur Verfügung (der unliebsame Angriff auf typo3.org klingt noch im Ohr).

Darum werden Passwörter verschlüsselt. Ich nutze dazu gerne die MD5-Verschlüsselung. Mit dem PHP-Befehl md5() wird z.B. aus “sprain” der lange String “7ed679c52f421a2e8a38e7916cee1346″. Das ist schon mal ganz gut, denn eine md5_decode()-Funktion existiert nicht.

Aber natürlich ist MD5 doch ganz einfach zu knacken, nämlich dank sogenannten Rainbow-Tabellen. Dies sind einfach riesige Datenbanken, die zu (fast) jedem MD5-Code ein Klartext-Pendant bereithalten. Probiers einfach mal aus mit obigem String.

Also was tun?
Ganz einfach: Mit Salz würzen! Wir fügen dem Passwort sogenanntes Salt hinzu, einen kurzen nur uns bekannten String. Wie das aussieht?//Verschlüsseln
$salt = "i12*7/aK";
$md5StringZumSpeichernInDB = md5($password.$salt);

//Später entschlüssen
$zuEntschluesselnderString = $password.$salt;
if($md5StringAusDatenbank == md5($zuEntschluesselnderString)){
    //Passwort korrekt!
}

Was bringt das nun?
Nun, so verschlüsselt entsteht aus “sprain” der String “48c5d5b6586400d40e9c99bb8c035221″. Der lässt sich nicht mehr so rasch entschlüsseln, denn entweder wird in den Rainbow-Tabellen gar kein Resultat gefunden oder aber ein unbrauchbares. Denn MD5-Strings sind nicht eindeutig. Es kann sein, dass zufälligerweise das Wort “Sonnenblume” auf den erstellten MD5-String passt. Dies bringt dem Angreifer aber nichts, denn ein Loginversuch mit dem Passwort “Sonnenblume” würde vor dem Verschlüsselungs-Vergleich wiederum mit dem Salt-String ergänzt werden – und erhält somit bereits wieder einen anderen Wert, der nicht mit dem korrekten “sprain” ergänzt mit dem Salt-String entspricht.

Eigentlich ein sehr simples Vorgehen, das aber deine Website ein ganzes Stück angriffsresistenter macht.

Neues Projekt: Twitter FriendSuggest

Aus Interesse an der Umsetzung und auch weil ich gespannt auf die Ergebnisse für meinen eigenen Account war, hab ich übers Wochenende ein neues Projektklein aufgestellt:
Twitter FriendSuggest!

Worum gehts?
Basierend auf der Freunde deiner Freunde bei Twitter wird ein Vorschlag generiert, wem du vielleicht folgen möchtest.

Warum machts Spass?
Weil du wahrscheinlich Leute entdecken wirst, die etwas zu sagen haben, die du aber noch nicht wirklich kennst.

Und was wird dir nicht passen daran?
Dass ein Klick auf den Follow-Button einen Tweet in deiner Timeline absetzt. Aber hey, es gibt Alternativmöglichkeiten: Du kannst mit Klick auf den Namen des Users dessen Timeline in Twitter öffnen und gleich dort folgen. Einfach die Checkbox oben auf der Seite enthaken.
Auf der anderen Seite: Wenn dir der Service gefällt sind ein, zwei solche Tweets eigentlich fair, oder? Und bieten bestimmt mehr Nutzen als twitternde Waagen.


«Your request for Twitter API whitelisting has been approved»

Na, dann kanns ja losgehen! :)

Eine reine Online-Währung: Was würde geschehen?

Was würde eigentlich geschehen, wenn wir unsere eigene Online-Währung starten würden? Nennen wir sie der Einfachheit halber mal Webbies. Und der Unterschied zu bestehenden virtuellen Währungen: ein Umtausch in Echtgeld ist nicht möglich.

Wie ist das Vorgehen?

  • Die Anmeldung erfolgt über einen bestehenden Service, welcher viele Mitglieder hat. Facebook oder Twitter liegen auf der Hand.
  • Jede Neuanmeldung erhält einen Grundstock von 1000 Webbies.
  • Über die Plattform können Webbies an andere Benutzer übertragen werden.
  • Über einfache Schnittstellen können Anwendungen dafür geschrieben werden: Wordpress-Plugins, die Inhalte nur gegen Bezahlung mit Webbies freigeben. Online-Spiele, bei welchen bestimmte Features/Levels mit Webbies dazugekauft werden können. Oder Terminal-Applikationen, die sogar Bezahlungen im Real-Life zulassen.

Wie gesagt, ein Umtausch in Schweizer Franken, US Dollar oder andere Währungen ist nicht möglich – ebenso auch nicht das Dazukaufen neuer Webbies. Diese muss man sich erwirtschaften mit eigenen Leistungen. Wer seine Webbies alle ausgibt muss sich irgendwo neue verdienen oder sich leihen (auf Kreditplattformen, die sich natürlich basierend auf der Schnittstelle bauen lassen).

Ich bin ökonomisch absolut nicht im Bild.
Darum frage ich euch: Wie würde das wohl enden? Wäre so etwas realistisch?

Coden fürs iPhone

Um’s mit dem aktuellen Trendbegriff auszudrücken: Obenstehendes Foto bietet einen Einblick in mein momentanes Geheimprojekt. Veröffentlichungstermin und obs überhaupt dazu kommt ist offen. Aber auf jeden Fall machts Spass.

JQTouch, Safari und Tweetie

Solange es PastryKit noch nicht gibt, scheint JQTouch eine gute Wahl zu sein als Framework für iPhone-Webapps.

Aber da gibt es bei mir ein seltsames Problem: Die Demo-Ansicht funktioniert auf meinem iPhone 3G S mit OS 3.1.2 auf dem Safari nicht. Klicke aber auf den entsprechenden Link in der Twitter-Software Tweetie 2 klappt es wie erwartet. Muss ich das verstehen?

Update: Keine Ahnung, wie es dazu kam, aber bei meinen Safari-Einstellungen war JavaScript ausgeschaltet. Jetzt klappts.
Trotzdem spannend: Wenn ich im Safari JS ausschalte hat dies offenbar keinen Einfluss auf Sites, die ich innerhalb einer App öffne.

Foto-1Foto

Vortrag über HTML5 und Vorstellung Cappuccino/Atlas

Im Rahmen des stets in relaxtem Rahmen stattfindenen Campus Bern werde ich am 24. November 2009 um 18:30 Uhr über folgende Themen ein bisschen etwas erzählen:

  • HTML5. Ein Überblick, was sich ändert, was praxistauglich ist und die Antwort auf die Frage, ab wann HTML5 benutzt werden sollte.
  • Atlas/Cappuccino. Erstelle umfangreiche Applikationen, die sowohl im Browser als auch plattformübergreifend als Desktop-Applikation laufen.

Der Event ist öffentlich und kostenlos und findet bei Meteotest in Bern statt. Freue mich, wenn du auch dabei bist.

Web Markup-Sprachen… was ist was?

XHTML 1.0, XHTML 2, HTML 4, HTML 5 und XHTML 5. Die Liste der möglichen Markup-Sprachen, die wir verwenden können um Websites zu coden ist verwirrend lang. Darum hier ein Versuch, mit einfachen Worten etwas Ordnung zu schaffen (ohne zu sehr ins Detail zu gehen)…

HTML 4
HTML 4 ist, was viele von uns in alter Zeit gelernt haben, zum Beispiel mittels der SelfHTML-Dokumentation. Ab HTML 4 konnte vernünftig mit CSS gearbeitet werden, da neu die id, class und style-Attribute standen.

XHTML 1.0
XHTML 1.x basiert auf HTML 4, verwendet aber eine XML-Syntax und ist strikter. Einige Merkmale:

  • Kleinschreibung von Tags: <h1> statt <H1>
  • Tags sind immer geschlossen: <br /> statt <br>
  • Attribute immer in Anführungszeichen und stets mit Name: <input type="radio" checked="checked" /> statt <input type=radio checked>
  • Ab XHTML 1.1 ist Angabe von Mime-Type erforderlich: <?xml version="1.0" encoding="UTF-8" ?>

XHTML 2.0
XHTML 2.0 ist nicht als Nachfolger von XHTML 1.0 gedacht. Es war viel mehr ein Versuch für einen Neustart, ohne Rücksicht auf Rückwärts-Kompatibilität. Sämtliche Tags, welche zu Darstellungszwecken dienten (wie z.B. <font>) wurden abgeschafft. Neue Tags, wie z.B. <nl> für Navigationslisten wurden eingeführt. Und jedes Element konnte Linkfunktionalität annehmen, ein <a>-Tag war nicht nötig. Aber wie auch immer… XHTML 2.0 ist bereits tot! Das W3C hat die Arbeit daran eingestellt zu Gunsten von HTML 5!

HTML 5
HTML 5 ist somit die Markup-Sprache der Zukunft. Auch HTML 5 verzichtet auf Tags, welche zur Darstellung genutzt werden. Neue Tags wie <audio>, <video>, <canvas>, <time> und andere wurden eingeführt. Javascript-Funktionalitäten zur Lokalisierung, für Drag&Drop etc. wurden eingeführt. HTML 5 ist rückwärtskompatibel und kann von Browsern, welche HTML 4 verstehen interpretiert werden, wobei jedoch nicht alle neuen Features unterstützt werden. Ich werde in einem späteren Post genauer auf die Eigenheiten von HTML 5 eingehen.

XHTML 5
Und was ist denn nun XHTML 5? Nun, eigentlich ist es wie HTML 5, aber wiederum strikter – und es werden nicht ganz alle Tags von HTML 5 unterstützt. Während in HTML 5 die Nutzung von Anführungszeichen bei Attributen freiwillig ist, Tags in Gross- oder Kleinbuchstaben geschrieben werden können, nicht alle Tags geschlossen werden müssen, gibt es bei XHTML 5 konkrete Regeln dafür.

Was nun?
Welche Markup-Sprache soll den nun verwendet werden? Schönerweise kann jedes valide XHTML 1.1-Dokument mit Auswechslung des Doctypes zu <!DOCTYPE html> zu einem validen HTML5-Dokument umformatiert werden.
Daher… Verwendung von XHTML 1.1 oder HTML 5 ist heutzutage absolut in Ordnung. WIchtig ist, dass man sich bewusst ist, in welcher Version man schreibt. Und immer schön validieren, gell… (ne, gar nicht versuchen, dieses Blog validiert überhaupt nicht).

Komplexes Thema. Korrekturen, Inputs und Ergänzungen gerne in den Kommentaren.

[FOWA 2009]: It’s over… what have we learned?

fowa_london_2009_largeFOWA 2009 is coming to an end. A dedicated rant against big companies by Gary Vaynerchuk and the yet to come Kevin & Gary Show with Vaynerchuck and Digg’s Kevin Rose build an entertaining finale of the conference.

What have we learned?
For me personally (and according to the people’s reaction also for others) there were especially two things which stood out. One of them were the very exciting demos of Atlas. Atlas is a development environment and visual editor for web apps based on the Cappuccino framework. With no plugins needed on client side great apps like 280 Slides can be built. And, also really exciting, without any change of the code the same app can run on the desktop on Mac and Windows!
Plus there are even more great things about it – like a nifty tool called nib2cib let’s you use Apple’s Interface Builder and then easily turn this app into a web app. Can’t wait to play around with that stuff soon!

The other big thing was HTML 5. Finally a lot of ballast will disappear and many nice features will be added. I wonder how long it will take until HTML 5 can be used without having to worry about old browsers…

On the non-tech side, this graph of my blog posts about FOWA show very well what it is about: People! And who should take care of them? Marketing!

Bild 2

The conference has given a lot of food for thought. I’m sure some of the thoughts will show up on the blog here in the future in one way or the other. But for now, I’ll turn off my computer and enjoy the Kevin & Gary Show… See you!

Älteres →