Firefox Cookie auslesen (sqlite3)

24/06/2014 - 01:07 von Robin Koch | Report spam
Hallo,

ich bin neu in der Gruppe und habe keine FAQ zu ihr gefunden, daher
hoffe ich gegen keine lokalen Gepflogenheiten zu verstoßen. :-)

Mein Problem:

Ich möchte mit Python 2.7.6 den Wert eines bestimmten Cookies aus
Firefox (v30.0) auslesen.
Firefox speichert seine Cookies in der SQLite-Datei 'cookies.sqlite'.

Mein erster Ansatz war natürlich(?) Pythons sqlite3-Module zu benutzen:


import sqlite3

dblocation = r'd:\temp\sqlite\cookies.sqlite'
query = r"""SELECT value FROM moz_cookies
WHERE baseDomain LIKE 'website.com' AND name = 'userid'"""

db = sqlite3.connect(dblocation)
cur = db.cursor()

cur.execute(query)


Der execute-Aufruf führt leider zu folgendem Fehler:


DatabaseError: file is encrypted or is not a database


Internetrecherche auf zu diesem Problem hat mich nicht viel
weitergeführt. Entweder hieß es die Datei wàre durch Firefox gegen
Zugriff gesperrt oder die SQLite-Version wàre veraltet.

Nun, die Datei ist in Ordnung, es wird nicht darauf zugegriffen und mit
dem SQLite Manager aus Firefox sowie direkt mit dem
sqlite3-Kommandozeilentool kann ich problemlos darauf zugreifen.[1]

Die SQLite-Versionsnummer lauten:
sqlite.version_info = 2.6.0
sqlite3.sqlite_version_info = 3.6.21

Wie ich das genau updaten soll ohne irgendwas neu zu compilieren weiß
ich nicht. Allerdings scheint mir die Datenbank nicht besonders
ausgefallen. Ich weiß nicht, ob das wirklich schon ein Versionskonflikt
sein kann.

Zum Vergleich dennoch die Versionsnummern der anderen Tools:

sqlite3.exe: 3.8.5
SQLite Manager: SQLite 3.8.3.1

Sollten da wirklich solch dramatische Änderungen passiert sein, dass die
Abwàrtskompatibilitàt leidet..?

[1] In der Tat löse ich das Problem im Moment durch

subprocess.check_output(["sqlite3.exe", dblocation, query])

Aber so richtig gut finde ich das nicht. %-)

Any thoughts?

Robin Koch
 

Lesen sie die antworten

#1 Stefan Schwarzer
24/06/2014 - 06:09 | Warnen spam
Hi Robin,

On 2014-06-24 01:07, Robin Koch wrote:
ich bin neu in der Gruppe



herzlich willkommen! :-)


import sqlite3

dblocation = r'd:\temp\sqlite\cookies.sqlite'
query = r"""SELECT value FROM moz_cookies
WHERE baseDomain LIKE 'website.com' AND name = 'userid'"""

db = sqlite3.connect(dblocation)
cur = db.cursor()

cur.execute(query)


Der execute-Aufruf führt leider zu folgendem Fehler:


DatabaseError: file is encrypted or is not a database





Zuerst habe ich mich gewundert, dass der Fehler erst bei
`execute` auftritt. Ein Test mit einer Nicht-Datenbank führt
aber bei mir auch erst beim `execute` zur Exception.

Internetrecherche auf zu diesem Problem hat mich nicht viel
weitergeführt. Entweder hieß es die Datei wàre durch Firefox gegen
Zugriff gesperrt oder die SQLite-Version wàre veraltet.



Um das Problem einzugrenzen, könntest du eine Datenbank aus
dem Kommandozeilen-Client frisch anlegen und testen, ob du
`SELECT`s auf dieser Datenbank laufen lassen kannst. Wenn
das geht, liegt es schon mal sehr nahe, dass es etwas mit
der Firefox-Datenbank-Datei zu tun hat.

Ich kann meine `cookies.sqlite` (unter Fedora Linux)
problemlos öffnen und mit `SELECT` Werte auslesen. Dafür
habe ich die Datei in ein gesondertes Verzeichnis kopiert.

Nun, die Datei ist in Ordnung, es wird nicht darauf zugegriffen und mit
dem SQLite Manager aus Firefox sowie direkt mit dem
sqlite3-Kommandozeilentool kann ich problemlos darauf zugreifen.[1]

Die SQLite-Versionsnummer lauten:
sqlite.version_info = 2.6.0



Ich nehme an, dass sollte `sqlite3.version_info` sein? Oder
wo kommt der Wert sonst her?

sqlite3.sqlite_version_info = 3.6.21



Zum Vergleich: Bei mir sind die Werte

sqlite3.version_info -> (2, 6, 0)
sqlite3.sqlite_version_info -> (3, 8, 3)

[1] In der Tat löse ich das Problem im Moment durch

subprocess.check_output(["sqlite3.exe", dblocation, query])



Das spricht ja auch stark dafür, dass es nicht mit der
Datenbank-Datei zu tun hat. Noch "sicherheitshalber" die
Frage: Handelt es sich bei den Zugriffen aus Python und über
die Kommandozeile um ein und dieselbe Datenbank-Datei
(gleiche Position im Dateisystem) oder könnte die von Python
aus genutzte Datei bei einem Kopiervorgang beschàdigt worden
sein?

Viele Grüße
Stefan

Ähnliche fragen