Ich bin ja vollends begeistert vom neuen Firefox. Das ganze Ding ist schnell, hat viele sinnvolle Funktionen, und funktioniert einfach besser als Firefox 2 (wäre ja auch schlimm, wenn nicht). Bis alle Erweiterungen wieder funktionieren, wird auch nur noch eine Frage der Zeit sein – Und wenn man nicht warten will, kann man die Überprüfung ja ausschalten, meist klappt es dann trotzdem.
Eine der großen Änderungen ist, dass Firefox das meiste jetzt in Datenbanken speichert. Natürlich in keinen Schwergewichten wie MySQL oder hochperformanten, großen Datenbanken wie PostgreSQL, sondern in einer (na ja, mehreren *g*) kleinen, feinen SQLite-Datenbankdateien, was es überhaupt erst möglich macht, solche Geschichten wie die Awesomebar oder Places zu benutzen.
Dieser Fortschritt hat allerdings den Nachteil, dass ältere Programme mitunter nicht mehr richtig funktionieren, da ihnen die Möglichkeit fehlt, auf bestimmte Dateien zugreifen zu können. So habe ich zum Beispiel zwei Tools, die auf die cookies.txt von Mozilla-Browsern zugreifen können, und dann mit diesen Cookies Websites aufrufen können.
Zum Beispiel kann man wget dazu veranlassen mit „–load-cookies="cookies.txt"“ die Datei zu benutzen, um dann zum Beispiel Seiten aus einem Passwortgeschützten Forum herauszuladen. Nun haben wir aber keine „cookies.txt“ mehr, in der Zeilenweise die Cookies in Plaintext aufgelistet sind, sondern einen „cookies.sqlite“, was eine SQLite-Datenbankdatei ist.
Diesen – auf den ersten Blick – Nachteil können wir uns aber auch gut zu Nutze machen und in einen Vorteil verwandeln. In „cookies.txt“ standen nun mal alle Cookies drin, wenn also diese Datei irgendwo angegeben wurde, hatte das Programm sofort alle Cookies zur Verfügung. Abgesehen von den – sich zugegeben recht gering auswirkenden – Performance-Einbußen, besteht hier auch ein gewisses Sicherheitsrisiko, da man nie mit hunderprozentiger Gewissheit sagen kann, was das Tool noch so alles macht, außer, man analysiert den Quelltext des Tools …
Aber werden wir mal etwas konkreter: Ich habe einen RapidShare-Premium-Account. Zusätzlich habe ich mir ein Tool geschrieben, mittels dem ich Dateien von RapidShare runterladen kann, dazu braucht das Tool die Cookie-Datei. Natürlich habe ich die entsprechenden Zeilen aus der „cookies.txt“ rauskopiert und in eine andere Datei eingefügt, die ich innerhalb meines Tools an wget übergebe.
Aber nun habe ich mein RS-Passwort geändert. Das Problem ist jetzt, dass das Tool immer noch auf die RS-Cookie-Datei zugreift, dieser Cookie aber nicht mehr die aktuellen Login-Informationen enthält. Folglich schlägt der Download mit dem Tool fehl. Irgendwie muss ich also die Cookie-Informationen aus Firefox in die Datei bekommen.
Ich könnte jetzt natürlich hergehen und mir die Mühe machen, den Cookie manuell aus der Datenbank herauszuschreiben und in die Cookie-Textdatei zu bringen, aber das ist umständlich und müsste jedes mal wiederholt werden, wenn sich etwas an dem Cookie ändert. „Aber das will man nicht“ ;)
Mit einem einfachen Python-Script ist das zudem schneller und sauberer erledigt, zudem schleichen sich weniger Fehler ein, und die ganze Sache kann automatisiert werden.
#!/usr/bin/python import sqlite3 as db import sys cookiedb = '/home/USENAME/.mozilla/firefox/PROFIL/cookies.sqlite' targetfile = '/home/USERNAME/cookies.txt' what = sys.argv[1] connection = db.connect(cookiedb) cursor = connection.cursor() contents = "host, path, isSecure, expiry, name, value" cursor.execute("SELECT " +contents+ " FROM moz_cookies WHERE host LIKE '%" +what+ "%'") file = open(targetfile, 'w') index = 0 for row in cursor.fetchall(): file.write("%s\tTRUE\t%s\t%s\t%d\t%s\t%s\n" % (row[0], row[1], str(bool(row[2])).upper(), row[3], str(row[4]), str(row[5]))) index += 1 print "Gesucht nach: %s" % what print "Exportiert: %d" % index file.close() connection.close()
Eine vollständig dokumentierte Version des Scriptes gibt es ebenfalls. Dort stehen noch mal einige Informationen als Kommentare drin und das ganze Script ist zum besseren Verständnis in kleine Abschnitte unterteilt. Und Selbstverständlich sind die Kommentare auf Englisch verfasst.
Dieses Python-Script kann nun genutzt werden, um vor dem Aufruf des eigentlichen Programms die Cookie-Datei frisch generieren zu lassen, mit allen aktuellen Cookie-Angaben. Und Zwar muss dazu das Script aufgerufen, und ein Parameter übergeben werden, der dann dahingehend verwendet wird, dass mit ihm Verglichen wird, ob der Hostname das Angegebene enthält.
./export-firefox-cookies.py rapidshare
In meinem Beispiel exportiere ich also die RapidShare-Cookies. Natürlich müssen in dem Script „cookiedb“ und „targetfile“ noch angepasst werden. Ich werde vielleicht mein Script noch etwas erweitern, so dass beim Aufruf auch eben diese Daten noch gleich mit angegeben werden müssen. Das Konzept sollte jedem Klar werden, der sich die Script-Datei herunterlädt, und die Kommentare liest. Python ist wie Schach: Einfach zu lernen, aber es braucht viel Übung, bis man wirklich gut ist – Trotzdem kann man es spielen, sobald man die Regeln kennt.
Mein RapidShare-Download-Tool habe ich bereits etwas erweitert. Ich habe bereits einen Cookiedatei-Parameter. Den Variablen-Namen habe ich angepasst und setze dort nun den Pfad zur Cookie-Datenbank ein. Weiter unten im Script rufe ich das Python-Script auf.
#!/bin/bash cookiedb="/home/dirk/.mozilla/firefox/dirk.default/cookies.sqlite" # Weitere Optionen und Vorbereitungen bash /home/dirk/.shellscript/export-firefox-cookies.py rapidshare # Download-Anweisungen und weiteres
Das Script speichert die Cookie-Datei dort, wo wget im späteren Aufruf die Cookie-Datei erwartet. Viel hat sich also nicht getan im Programmcode. Es ist lediglich eine einzige Zeile hinzugekommen, und aus „ästhetischen Gründen“ habe ich eine Variable umbenannt ;)
Nun habe ich auch noch – anders als vorher – immer eine „frische“ Cookie-Datei. Ich kann also das Passwort regelmäßig ändern, ohne dem RapidShare-DL-Tool ALLE Cookies zur verfügung stellen zu müssen, indem ich die Original-Datei angebe, und bin trotzdem dynamisch und aktuell, weil das Tool bei jedem Aufruf den aktuellen Cookie aus der Datenbank holt.
Vielleicht kann das ja einer von euch auch gebrauchen.





































Optimal, genau sowas wollte ich grad selber schreiben. Thx :)
Kommentar von Mephisto am 11. August 2008 um 04:40 Uhr