Frage: Interesse an einem Eintrag in meiner Blogroll? (Dieses Blog hat durchschnittlich 200 bis 300 Besucher Täglich (Gut kein Schwein kommentiert, aber sie sind da *g*). Wenn mir der Vorschlag gefällt, nehme ich die Seite oder das Blog auf. Mail genügt: ich-will-in-deine-blogrol@schlunzen.org … Irgendwie muss die Blogroll doch voll zu kriegen sein, ohne, dass sich jemand benachteiligt fühlt *g*

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.

  • Technorati
  • MisterWong
  • Digg
  • Facebook
  • del.icio.us
  • Twitter
  • MySpace
  • StumbleUpon
  • Reddit
  • BlinkList
  • blogmarks
  • Fark
  • Simpy
  • Slashdot
  • MyShare
  • Google Bookmarks
  • Live
  • Sphinn
  • Wikio
  • DotNetKicks
  • eKudos
  • Gwar
  • Haohao
  • Internetmedia
  • NewsVine
  • Wists
  • Yigg
  • Faves
  • Meneame
  • Yahoo! Buzz
  • Blogosphere News
  • Kirtsy
  • laaik.it
  • Mixx
  • Webnews.de
  • FriendFeed
  • LinkedIn
  • Linkter
  • Ping.fm
  • Propeller
  • SphereIt
  • ThisNext
  • Webride
  • Fleck
  • HelloTxt
  • Identi.ca
  • LinkArena
  • Design Float
  • MSN Reporter
  • Netvibes
  • Segnalo
  • Upnews
  • Xerpi

Der Beitrag wurde am 19. Juni 2008 veröffentlicht und unter Dummes Blabla, Ich war ein Posting, Technisches abgelegt.

16 Kommentare für „Firefox 3 und cookies.txt“

  1. Raja sagt:

    DUDE!!! was just about to code it myself when I saw tis. Thans man!!!

  2. [...] j’aurais pu le faire en python mais bon… (le tool de l’allemand l’est [...]

  3. SirDodger sagt:

    Nicht übel! ;)
    Allerdings kann man sqlite auch sauber per bash abfragen, daher muß man das ganze nicht in python anreissen … :-D

  4. [...] first needed to get through the password login.  since I wanted to use wget, I found a little program that transcoded my firefox sqlite cookies into txt cookies that wget could handle.  The python code [...]

  5. TVHeini sagt:

    Klasse, genau das hab ich gesucht.
    DANKE!

Kommentar hinterlassen

XHTML: Folgende Tags können benutzt werden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

icewind’s Blog ³ – Dirk Sohler – http://blog.schlunzen.org/2008/06/19/firefox-3-und-cookiestxt/
Stoppt die Vorratsdatenspeicherung! Jetzt klicken & handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien: