[Python-de] Firefox Cookie auslesen (sqlite3)
Stefan Schwarzer
sschwarzer at sschwarzer.net
Di Jun 24 06:09:39 CEST 2014
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
Mehr Informationen über die Mailingliste python-de