Manche Sachen sind zum Kotzen und es ist gut so!

Arrgh, Sicherheit kann nerven!

Ich schreib grad an einem kleinen Java Programm. Ziel ist es, Webseiten zu laden und abzuspeichern. Leider sind die Webseiten passwortgeschützt. Ich muss mich also auf den Webseiten einloggen um den Cookie zu bekommen, um an die HTML-Datei laden zu kommen. Soweit so gut. Nun würde ich gerne direkt aus dem Browser das Cookie durch das Java Programm auslesen. Is aber nicht drin :-(

Prinzipiell ist das natürlich gut, dass Java Applets nicht Cookies fremder Webseiten auslesen können. Für mich bedeutet das aber halt, dass ich die Cookie.txt des Firefox parsen muss und mich bei jedem Eintrag fragen muss, ob das Cookie zur gesuchten Webseite passt, ob das Cookie noch gültig ist und schlussendlich ob dies das Cookie sein wird, dass mir den Zugang zur Webseite ermöglicht. Nervig!

Ach ja, ich hab auch keine Ahnung wofür das gut sein soll, is ne Auftragsarbeit. Da aber nur die HTML-Seite geladen werden soll und der Auftraggeber per Browser Zugang zu den Webseiten hat wirds schon nix illegales sein.

„Qualcomm Germany Hiring“: Öhm ja und Tschüss

Ich hab gerade meinen N800 Browser Switch Artikel bei Digg eingetragen und da ist mir folgende AdSense-Einblendung aufgefallen:

Qualcomm AdSense anzeige bei Digg.com

„Naja, klickst mal drauf“ dachte ich mir. Schließlich ist Qualcomm in Deutschland kein Unbekannter. Wer denkt nicht mit Freuden zurück ans Anfang dieses Jahrtausends, als der Mobilfunkbetreiber Quam mit großer Werbekampagne Milliarden für eine UMTS-Lizenz bezahlte und dann nach kürzester Zeit den Geschäftsbetrieb einstellte.

Ansicht bei Klick auf eine AdSense-Textanzeige bei Digg.com mit dem Text

„Klickst mal drauf, guckst was kommt“, dachte ich mir und konnte nicht ahnen, was sich hinter www.qualcomm.com/careers verbirgt:

Wer will, kann sich den Quellcode im Detail ansehen. Vor allem den Kommentar
# change expiry to +1y after testing
find ich dann doch amüsant: www.qualcomm.com/careers Quellcode

Blogs, Sicherheitslücken und Verantwortung

Wie ich gerade bei BlogSecurity lesen musste, wurde gestern Nachmittag das Blog SvenKubiak.de „defaced“, d.h. gehackt und die Startseite durch eine andere ersetzt. Die Ursache fand sich in einer veralteten Version des MyGallery-Plugins.

Software ist fehlerhaft. Punkt. Immer und zu jeder Zeit, den Software wird von Menschen erdacht und erschaffen und so fehlerhaft wie der Mensch so fehlerhaft ist auch Software, im Schnitt bedeutet das 2 Fehler je 1000 Zeilen Programmiercode.
Nun gibt es vielerlei verschiedene Fehler in Software. Manche Fehler treten nie auf, denn die Stelle an der der Fehler gemacht wurde, wird nicht erreicht (zB weil die Stelle nur im Fehlerfall erreicht wird), manche Fehler haben nur kosmetische Auswirkungen (Fehler in der Benutzeroberfläche oder allgemein in der Ausgabe), manche Fehler führen zum Absturz der Software. Manche Fehler aber sorgen für von außen angreifbare Sicherheitslücken, so wie in diesem Falle.

Programmierfehler sind immer ärgerlich, sowohl für den Software-Entwickler als auch für den Nutzer der Software, denn für beide bedeuten Programmierfehler Arbeit. Der Software-Entwickler steht nun vor der Aufgabe, den Programmierfehler zu beheben und dabei möglichst keine neuen Sicherheitslücken aufzureißen. Der Software-Nutzer hingegen steht nun in der Pflicht, dafür sorge zu tragen, dass er möglichst immer die aktuellste Version der Software vorliegen hat.

Software-Anwender haben üblicherweise das alleinige Interesse die Software anzuwenden. Sie wollen sich nicht um Programmierfehler und Software-Wartung kümmern, denn schließlich haben sie ja für die Software bezahlt und sich die Mühe gemacht, das Software-Produkt zu installieren und sich einzuarbeiten. Hier liegt ein gewaltiger Denkfehler.
Jedem Autofahrer ist bewusst, dass er sich um die Pflege und Wartung seines Autos kümmern muss. Das Auto muss gewaschen werden, der Öl-Druck überprüft und defekte Teile ausgewechselt werden. Tut er das nicht, kann das zu teuren Reparaturen und zum stehen bleiben des Fahrzeugs führen.
Bei Software ist dies kaum anders. Zwar gibt es keine Verschleißteile, die regelmäßig gewechselt werden müssen, allerdings ist regelmäßiges putzen (Festplatte aufräumen, nach Viren scannen, Backups anfertigen) und regelmäßige Wartung (va das überprüfen ob neue Versionen vorliegen) nötig, da es sonst zu Rucklern, Abstürzen oder Datenverlust kommen kann.
Dies nenne ich die Verantwortung gegenüber dem Eigentum.

Programmierfehler auf öffentlich zugänglichen Geräten, wozu auf ein Blog gehört, können aber zu deutlich schlimmeren Folgen, als nur zu Rechnerabstürzen führen. Wenn zB die Steuerung einer Ampel versagt und alle Ampeln gleichzeitig auf Grün springen, ist sogar Leib und Leben in Gefahr. Ganz so dicke kann es für Blogger dann doch nicht kommen. Im Idealfall wird eine Sicherheitslücke entdeckt und der Fehler behoben, noch bevor die Sicherheitslücke ausgenutzt wurde, im schlimmsten Fall kann aber der Webserver auf dem das Blog liegt gekapert werden und über ihn strafrechtlich relevante Daten verbreitet, die zu gehörigen Problemen für den Blogger führen können.

Was ist nun zu tun?

  1. Überlegen einer Backuplösung für das Blog, damit die Daten im Blog nicht verloren gehen können. Ich verwende das WordPress Database Backup Plugin um die Datenbank mit den Artikeln und Kommentaren regelmäßig (einmal am Tag) zu sichern. Desweiteren habe ich alle Dateien, die auf dem Webserver liegen, bei mir lokal gespeichert.
  2. Aktivieren des WordPress Update Monitor Plugins, dass anzeigt, wenn eine neue WordPress-Version erschienen ist, darum ein Update erforderlich ist und dieses Update zeitnah durchführen.
  3. Überprüfung des Blogs durch den WP-Scanner von BlogSecurity. Dieser testet sowohl die Plugins, als auch das verwendete WordPress Theme auf Sicherheitslücken. Die entsprechenden Updates sollten installiert werden.
  4. Überprüfen jedes einzelnen installierten Plugins, ob es eine neue Version gibt und gegebenenfalls das Installieren dieser neuen Version.
  5. Ausarbeitung eines Wartungsplans für das Blog. In meinem Fall bedeutet das, dass ich täglich die WordPress-Datenbank und bei jeder Veränderung der Dateien diese auf meinem Rechner sichere. Desweiteren lege ich vor jedem WordPress-Update eine zusätzliche Komplettsicherung aller Dateien und der Datenbank an. Bei jedem WordPress-Update überprüfe ich JEDES Plugin, ob eine neue Version vorliegt.
  6. Überprüfen des Webservers, denn natürlich kann und wird auch dieser Sicherheitslücken haben. Wenn man nicht gerade selbst Administrators seines eigenen Servers ist, bleibt einem hier nur das Anmahnen von Updates beim Hoster (va Datenbank, PHP-Version, Webserver und Betriebssystem seien hier genannt).

Hat man diese sechs Schritte durchgeführt und hält sich an seinen Wartungsplan, so kann eigentlich nichts mehr schief gehen. Außer natürlich, die verwendeten Passwörter sind nicht optimal

Umlaute machen Ärger

Vorhin hat mich mein Dad darauf hingewiesen, dass das Plugin Search-Hilite keine Umlaute kennt. Eine dumme Sache das, sind Umlaute im Deutschen doch nicht selten.

Search-Hilite sorgt dafür, dass die gesuchten Worte farblich hinterlegt sind. Sucht man zB mit Google oder der WordPress-Suche nach „Korbinian Schoder München Hohenzollernstraße“, so werden diese Suchbegriffe in meinem Blog bunt markiert. Die zwei Worte mit den Umlauten aber würden normalerweise nicht markiert, da das Plugin keine Umlaute kennt.

Eigentlich ist die erwartete Lösung ganz einfach: Man sucht im Quellcode des Plugins die richtige Stelle, lässt dort die Suchbegriffe auf Umlaute durchsuchen und ändert sie in die passende Kodierung. Schnell findet man heraus, dass die Zielkodierung HTML-Dezimal ist. Die WordPress-Suche gibt in der Adressleiste des Browsers einen UTF-8 String, das Blog wurde unter „Einstellungen|Lesen“ auf UTF-8 eingestellt, also sollte die Sache doch klar sein. Tja, sollte. Ich habe fast eine 3/4 Stunde gebraucht um herauszubekommen, dass in der Suchanfrage von Search-Hilite schon ISO 8859-1, also Ä und ä vorliegen ­čśŤ
Doofes Ding das.

Die Änderungen nimmt man so vor:

  1. „Plugins|Plugin-Editor|Search_Hilite“ öffnen
  2. Suchen nach

    $term = preg_quote($term, '/');

  3. Davor folgende Zeilen einsetzen, dabei die * in der ersten Zeile entfernen

    $hilite_chars['feed'] = array('&*#196;', '&*#228;', '&*#214;', '&*#246;', '&*#220;', '&*#252;', '&*#223;'); $hilite_chars['ecto'] = array('├ä', '├Ą', '├ľ', '├Â', '├ť', '├╝', '├č'); $term = str_replace($hilite_chars['ecto'],$hilite_chars['feed'], $term);

  4. „Datei aktualisieren“

Dies dürfte bei vielen Blogs funktionieren. Eine Gewährleistung oder ähnliches gebe ich dafür aber nicht, falls also etwas schief gehen sollte, könnt ihr mich nicht haftbar machen.

Das Umlaut-Highlight ist übrigens Case-sensitive, Groß- und Kleinschreibung in den Suchbegriffen wird also unterschieden.

Ein Gruß geht an Michael Renzmann, der mich mit mit seinem o42clean_umlauts inspiriert hat (oder anders gesagt, ersetzt man im obigen Code „hilite“ mit „o42_cu“ und „$term“ mit „$title“, dann findet man die Zeilen in seinem Plugin)

[Nachtrag] Austricksen der HTML Interpretation in der Anzeige des Codes eingebaut

Mymuesli Widget

Wie bereits erwähnt gibt es von MyMuesli so nette Widgets zum einbinden in die eigene Webseite. Widgets sind hier kleine HTML-Schnipsel, meistens Javascript, die man in den Quellcode der kopiert und die im Browser ein Bild anzeigen.

Die MyMuesli Widgets zeigen die Zutaten des Müslis und verlinken auf das entsprechende Müsli bei MyMuesli, so dass man es zB direkt bestellen kann. Nun habe ich aber noch kein Müsli bestellt, wie kann ich aber trotzdem ein entsprechendes Widget anzeigen? Der Code eines solchen Widgets sieht aus wie folgt (jede Zeile beginnt mit einer < und endet mit einer >):
<script type="text/javascript" src="http://www.mymuesli.com/muesli-mix-embedd-js.php?mix=00000&name=Wakes+me+up&zutaten=81-81-49-39-89-&widget=1"> </script> <noscript a href="http://www.mymuesli.com/muesli-mix.php?mix=00000"> mymuesli "Wakes me up" </a> </noscript>

In der ersten Zeile steht das Javascript für die grafische Darstellung des Müslis. Hat ein Nutzer Javascript ausgeschalten bekommt er einen einfachen Link auf das Müsli angezeigt.
Das „mix=00000“ steht für die ID der Müslimischung. Diese ID bekommt man erst nach der Bestellung. Ich habe einfach 00000 gewählt, weil diese ID nicht vergeben ist. Klickt man auf den Link im Widget, wird einem angezeigt, dass es diese Mischung nicht gibt. „name=Wakes+me+up“ gibt den Namen des Müslis an. Nach dem = einfach den gewünschten Namen eintragen, die Leerzeichen sind durch + zu ersetzen. „zutaten=81-81-49-39-89“ gibt die Zutaten an, die angezeigt werden. Die ID 81 steht zB für die Kokoschips.
Wie kommt man nun an die IDs für die eigene Mischung?
Am besten mischt man sich erstmal sein Wunschmüsli. Dann öffnet man den Seitenquelltext der Webseite, im Firefox durch STRG+U. Nun STRG+F drücken und den Namen der Basismischung eingeben und danach suchen lassen. Der erste Treffer ist im Quellcode für die Anzeige der Dose. Die Zeile sieht zB so aus:
a href="#" onclick="xajax_js_del_zutat_obj('0',89);" title="Zutat entfernen!">Chocolate-Dream
Die 89 ist die ID für Chocolate-Dream. Die IDs für die anderen Zutaten kann man aus den Zeilen oberhalb im Quellcode erkennen. Will man eine Zutat zwei mal auftauchen lassen (so wie bei mir die Kokoschips), dann schreibt man die ID einfach zwei mal in die Javascriptzeile.

Fertig ist das Widget für das eigene Müsli.

Wie gesagt, hat man das Müsli erstmal bestellt und somit die ID der Müslis, dann trägt man diese einfach hier ein und schon wird der komplette Code zum einbetten angezeigt.

Which Programming Language are You?

OMG, ich glaube, ich geh sterben:

You are Visual Basic. You have little respect for common sense.  You are immature, but have recently begun to grow up.
Which Programming Language are You?

via F!XMBR

Geek-Stöckchen

Ein kleines Stöckchen, geworfen von discobeats und von Robert an die Massen verteilt.

Was war Deine erste ÔÇťechteÔÇŁ PC-Hardware?
Hmm, PC-Hardware… Wenn PC für IBM-kompatible Rechner steht war das ein 286er mit 16 Mhz, der 1993 in der Praxis meines Dads ausgemustert wurde. 100 MB Platte hatte die Kiste und war 1 1/2 Jahre lang mein Spielzeug.
Steht PC für Personal Computer war der ZX Spektrum mein erster Rechner. Damals, 1987, hatte ich ihn für 200 Mark inkl ca 20 Spiele von meinem Onkel gekauft.

Deine erste Anwendung welche Du benutzt hast?
Das wird wohl irgendeines der Programme auf dem ZX Spektrum gewesen sein. Kann aber auch gut sein, dass da gar keine Applikation dabei war. Dann wäre StarWriter auf dem Amstrad CPC6128 1988 meine erste App gewesen.

Dein estes Spiel?
Vermutlich JetPac. Kann aber auch Boulder Dash gewesen sein

Hattest Du von Anfang an Spass an der Materie?
Und ob. Ich kann mich noch gut an eines meiner ersten selbstentwickelten Programme erinnern… Es hat in einer einfachen Schleife den Bildschirm mit schwarzen Feldern ausgefüllt. Ca 5 Minuten hat es gedauert, den Fernseher einmal von weiß nach schwarz „umzuschalten“. Naja, effektiv war es wohl nicht, ich war ja aber auch erst sieben.

Seit wann bist Du online, und mit welchem Anbieter
Müsste 1994 gewesen sein. Mit Windows 3.1 oder 3.11 und BTX/Datex-J. War das spannend, die ersten Ausflüge ins „Netz“. Oder der Besuch in Unitopia. Oder wenn die Telefonrechnung zu Hause ankam…