Diese Seite wird über eine ungesicherte Verbindung abgerufen. Jeder, der zufällig gerade in der Nähe ist, kann völlig problemlos jegliche Kommunikation mit dieser Seite einsehen und nach belieben manipulieren. Unter dem folgenden Link ist eine HTTPS-Gesicherte Verbindung möglich: https://0x7be.de.org. Beim Anklicken eines beliebigen Links innerhalb dieses Blogs wird automatisch auf die HTTPS-Gesicherte Verbindung gewechselt.

Es kann hierbei zu einem Warnhinweis durch den Browser kommen, da die von dieser Seite verwendete Zertifizierungsstelle CAcert unkommerziell ist, und als solche derzeit nicht in den gängigen Browsern vorinstalliert wird. Es ist also nötig, entweder eine Ausnahmeregelung für 0x7be.de zu definieren, oder das CAcert-Zertifikat dem Browser hinzuzufügen.

Dear english-speaking visitors: With this script you can extract cookies from the cookies database of Firefox 3.x via a simple Python script. The script is documented in english very well, even though the blog post is in German.

Simple download the script, extract it, and view the source code for further information. If you want to call the script, use “./scriptname host”, where “host” is a part of the URL for that you want to get the cookies.

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
  • 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
  • MSN Reporter
  • Netvibes
  • Segnalo
  • Upnews
  • Xerpi
  • Current
  • Diigo
  • Global Grind
  • HackerNews
  • Hyves
  • LinkaGoGo
  • muti
  • Posterous
  • Scoopeo
  • Socialogs
  • Suggest to Techmeme via Twitter
  • Tumblr
  • Yahoo! Bookmarks
  • IndianPad
  • Live
  • N4G

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

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

  1. Mephisto sagt:

    Optimal, genau sowas wollte ich grad selber schreiben. Thx :)

  2. Seweryn Niemiec sagt:

    cool, this is exactly what I needed. thx

  3. I just added after “targetfile = …”

    what = ""
    if len(sys.argv) == 2:
    what = sys.argv[1]

    so I can export all cookies and I don’t have to put any parameters

  4. styla sagt:

    Hallo!
    Ich habe das selbe Problem, ich muss an die Cookie-Daten.
    Ich nutze MacOSX 10.5 und Firefox 3.
    Leider konnte ich bisher die cookies.sqlite nicht finden.
    In meinem Home-Dir existiert kein Verzeichnis mit dem Namen “.mozilla”. Kann mir jemand helfen und sagen wo Firefox 3 unter OSX die cookies speichert?

  5. icewind sagt:

    Beim Mac ist natürlich mal wieder alles etwas anders ;)

    http://www.firefox-browser.de/...r#Mac_OS_X

  6. Peter Jochum sagt:

    Danke für dein Script. Das ist zu Semesteranfang bei den geschützten LV-Seiten ein Lebensretter,

  7. [...] The geeky way: Practice your German and Python scripting on this blog post. [...]

  8. Andrea sagt:

    This is very cool! :) Would you mind if I include this in a project? I would like to write a Facebook plugin for Avatar-Factory. You can see what it is at
    http://ubuntuforums.org/showth...p?t=486359

    Your script is exactly what I need to authenticate in a automatic manner.

  9. icewind sagt:

    Sure, just do it. But remember: No support :)

  10. Andrea sagt:

    Thank you very much. :-)

  11. Raja sagt:

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

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

  13. SirDodger sagt:

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

  14. [...] 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 [...]

  15. TVHeini sagt:

    Klasse, genau das hab ich gesucht.
    DANKE!

  16. rs sagt:

    Ich musste file.write(“# Netscape HTTP Cookie File”) als erste Zeile in der Outputdatei hinzufügen.

    Ohne diese Ergänzung gab es eine Fehlermeldung von _MozillaCookieJar.py: does not look like a Netscape format cookies file

  17. Slightly improved version of your script is here: http://gist.github.com/157109...

  18. [...] Ab Mozilla Firefox, Version 3.x kann dieses kleine, feine Python-Script benutzt werden, um wieder in den Genuss einer maßgeschneiderten cookies.txt zu kommen [...]

  19. Doug sagt:

    Added support for chrome as well (slighly different DB format)
    http://gist.github.com/185625...

  20. cala sagt:

    Great script! However the original download link in the post has an extra “http” in front. Could you fix this, please?

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="">

0x7be.de – Dirk Sohler – https://0x7be.de/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: