Firefox cookies & wget

Many websites use cookies to validate a user once they have logged in, and then allow further access to the rest of the website beyond the login page.

Sometimes you want to script access to certain pages using tools such as wget, and given that wget can use (and save) cookies, it can be convenient to take cookies from a working browser session, feed them in to wget, and allow the script to do its job without having to work out how to get it to log in for itself (although this can also be an interesting, and/or useful, exercise in its own right).

Wget uses a cookie file in Netscape format:

Field Type Description
Host String The hostname the cookie belongs to
Subdomains Boolean Whether the cookie is allowed to be used by subdomains
Path String The path the cookie relates to
Secure Boolean Whether the cookie may only be transferred over HTTPS
Expiry Integer Unix epoch timestamp when the cookie expires (0 for never)
Name String The name of the cookie
Value String The value of the cookie

Firefox (at least, adequately recent versions) stores its cookies in SQLite, so it's handy to have a way of converting from one to the other.

The SQLite table is called moz_cookies and the schema for it is:

CREATE TABLE moz_cookies
 (id INTEGER PRIMARY KEY,
  baseDomain TEXT,
  originAttributes TEXT NOT NULL DEFAULT '',
  name TEXT,
  value TEXT,
  host TEXT,
  path TEXT,
  expiry INTEGER,
  lastAccessed INTEGER,
  creationTime INTEGER,
  isSecure INTEGER,
  isHttpOnly INTEGER,
  appId INTEGER DEFAULT 0,
  inBrowserElement INTEGER DEFAULT 0,
  CONSTRAINT moz_uniqueid UNIQUE (name,
   host,
   path,
   originAttributes));
CREATE INDEX moz_basedomain ON moz_cookies
 (baseDomain, originAttributes);

Firefox's SQLite database file is stored at ~/.mozilla/firefox/*.default/cookies.sqlite and you can interrogate the contents using the sqlite3 binary (if it's not already installed on your machine, it's provided by the sqlite3 Debian/Devuan package).

Here's a command which will generate a Netscape-format cookie file from the SQLite database:

sqlite3 -separator $'\t' ~/.mozilla/firefox/*.default/cookies.sqlite
 "select host,
  case substr(host,1,1)='.' when 0 then 'FALSE' else 'TRUE' end,
  path,
  case isSecure when 0 then 'FALSE' else 'TRUE' end,
  expiry,
  name,
  value from moz_cookies where host like '%domain'"

Replace domain with the trailing part of the website you want to extract cookies for (eg: santander.co.uk).

The result should be similar to (tab-separated fields):

business.santander.co.uk FALSE / TRUE 1604639593 ss_cookie 714f080774e8e24e9e742cdaf1a03ade
business.santander.co.uk FALSE / TRUE 1636089193 SanUK_ID FredBloggs
business.santander.co.uk FALSE / TRUE 1636089248 deviceTokenCookie PMV6BKRYTlRlXiC2Xrtfkw4ZOEc3pZj66rocfsYmSO40cqlJCHQvuuSuwBRZtFVtrqaJLdBRPYV4RsNXBUrPI1Qnadug%253D%253D
business.santander.co.uk FALSE / TRUE 1636089248 deviceTokenFSO PMV6BKRYTlRlXiC2Xrtfkw4ZOEc3pZj66rocfsYmSO40cqlJCHQvuuSuwBRZtFVtrqaJLdBRPYV4RsNXBUrPI1Qnadug%253D%253D
.business.santander.co.uk TRUE / FALSE 1612330542 s_nr 1604554542535-New

Go up
Return to main index.