Могу ли я получить данные Firefox localStorage для URL, который больше не существует?

542
Ken Bellows

Вроде странный вопрос, но вот основная ситуация.

Некоторое время назад я написал простое небольшое приложение-задачу для использования некоторыми сотрудниками во внутренней корпоративной сети и размещал его на общем диске. Ради настойчивости, без необходимости настройки веб-сервера, пользовательские данные сохранялись в localStorage браузера.

Недавно SysAdmins переработал систему адресации сетевых дисков, что привело к изменению URL-адреса моего маленького приложения. Конечно, это означает, что страница больше не имеет доступа к тому же объекту localStorage, и любой, кто использовал мое приложение, теперь «потерял» свои данные, даже если они все еще хранятся где-то в Firefox. (Мы все используем Firefox 31 в Windows 7, на случай, если что-нибудь изменится.)

Итак, вопрос в том, могу ли я получить эти данные localStorage? Моя первая мысль, хотя это и было kludge, заключалась в том, чтобы пользователь добавил запись в свой hostsфайл, чтобы указать старый URL-адрес на другой файл, который будет экспортировать данные (или, в этом отношении, указать на тривиальный файл и получить данные вручную в веб-консоли). Но, как вы уже догадались, hostsфайл заблокирован, и у нас нет прав администратора.

В заключение, я знаю о различных аддонах Firefox, которые помогают с localStorage, но, как я упоминал ранее, все это происходит в изолированной корпоративной сети, поэтому ввод аддона по такой тривиальной причине не является началом.

Мысли?

2

1 ответ на вопрос

3
Ken Bellows

For posterity, I found that localStorage data is stored in a sqlite file called webappsstore.sqlite in your Firefox profile directory. On Windows, this can be found at %APPDATA%\Mozilla\Firefox\Profiles\\webappsstore.sqlite. To read its contents I used a little Python script that uses the sqlite3 package:

import os, sqlite3 profiles = os.path.join(os.environ('APPDATA'),'Mozilla\\Firefox\\Profiles') profile = os.path.join(profiles, os.listdir(profiles)[0]) db = os.path.join(profile,'webappsstore.sqlite') print([entry.encode('utf-8') for entry in sqlite3.connect(db).iterdump()]) 

(I used Python 3, not sure if there are differences in the Python 2 version of sqlite3.)

This will output a lot of data; I recommend redirecting into a file. The data will be in SQL data creation statements. Each entry in local storage has a domain and key associated with it in a table. The URL is always written backwards in the database. You're looking for something like the following:

INSERT INTO "webappsstore2" VALUES('moc.elpmaxe.www.:https:443','myLocalStorageKey','{"key":"value","pairs":["go","here"]}') 

You'll find your localStorage key-value pairs somewhere in the output.

РЕВСНА ЛУФЕСУ СИТ Роф СКНАХТ Cryptopat 6 лет назад 0