Если вдруг вам пришла в голову здравая мысль начать хранить пароли от всяких сайтов в нормальном месте*, отказавшись от достаточно ненадёжного хранения «прямо в браузере», вы столкнётесь с проблемой: а как же добыть из браузера все свои пароли? Та же самая проблема возникает, если вы вдруг решаете сменить браузер.
По-хорошему этой проблемой надо озадачиваться раньше: начиная помещать куда-то ценную информацию, полезно на ранних стадиях подумать, как её оттуда извлекать, если понадобится. Но думать заранее (в общем случае — «мыть тарелки после еды, а не перед») — это, как это ни странно, не самый простой навык, обучение которому завершить невозможно (есть, конечно, люди, которые и не пытаются, но сейчас речь не о них).
Так вот про извлечение паролей. Все браузеры позволяют копировать данные из своего менеджера паролей. Поштучно. И вот когда вы по одному добудете все свои пароли — вы научитесь заранее интересоваться возможностью извлечения информации ;)
Ну а если вам кажется, что этот урок уже усвоен (ну-ну…), можете извлечь их оптом.
Chrome / Chromium версии 67 и новее
Экспорт вернули! В менеджере паролей
Код:
chrome://settings/passwords
нажать на три точки и там будет команда экспорта.
Chrome / Chromium версии 61 — 66
Открываете менеджер паролей — chrome://settings/passwords (скопируйте в адресную строку в новом окне) — вызываете Developer Console (Ctrl+Shift+I или F12 или найдите в меню), там идёте в раздел Console и копируете туда код: для Chrome 61-62
Код:
// 1. Open chrome://settings/passwords
// 2. Open chrome developer tools (using F12 or Ctrl+Shift+i)
// 3. Run the following code in the console tab
// 4. Copy output in a text file and save it somewhere safe!
function asyncForEach(array, done, iterator) {
var i = 0;
next();
function next(err) {
if (err) {
done(err);
}
else if (i >= array.length) {
done();
}
else if (i < array.length) {
var item = array[i++];
setTimeout(function() {
iterator(item, i - 1, next);
}, 0);
}
}
}
settingsUi = $$('settings-ui');
settingsPage = Polymer.dom(settingsUi[0].shadowRoot);
container = settingsPage.querySelector('#container');
settingsPasswordsAndForms = Polymer.dom(Polymer.dom(Polymer.dom(settingsPage.querySelector('#main').shadowRoot).querySelector('settings-basic-page').shadowRoot).querySelector('settings-passwords-and-forms-page').shadowRoot);
page = settingsPasswordsAndForms.querySelector('passwords-section').shadowRoot;
passwordSection = Polymer.dom(settingsPasswordsAndForms.querySelector('#pages')).querySelector('#passwordSection');
list = Polymer.dom(page).querySelector('iron-list');
passwordItems = list.get('items');
asyncForEach(passwordItems, function () {
console.log(JSON.stringify(passwordItems, null, 4));
// Now you can save output in a text file!
}, function (item, index, next) {
passwordSection.passwordManager_.getPlaintextPassword(item.loginPair, function (item) {
passwordItems[index].password = item.plaintextPassword;
next();
}.bind(passwordSection))
});
для Chrome 63 и далее
Код:
// 1. Open chrome://settings/passwords
// 2. Open chrome developer tools (using F12 or Ctrl+Shift+i)
// 3. Run the following code in the console tab
// 4. Copy output in a text file and save it somewhere safe!
function asyncForEach(array, done, iterator) {
var i = 0;
next();
function next(err) {
if (err) {
done(err);
}
else if (i >= array.length) {
done();
}
else if (i < array.length) {
var item = array[i++];
setTimeout(function() {
iterator(item, i - 1, next);
}, 0);
}
}
}
settingsUi = $$('settings-ui');
settingsPage = Polymer.dom(settingsUi[0].shadowRoot);
container = settingsPage.querySelector('#container');
settingsPasswordsAndForms = Polymer.dom(Polymer.dom(Polymer.dom(settingsPage.querySelector('#main').shadowRoot).querySelector('settings-basic-page').shadowRoot).querySelector('settings-passwords-and-forms-page').shadowRoot);
page = settingsPasswordsAndForms.querySelector('passwords-section').shadowRoot;
passwordSection = Polymer.dom(settingsPasswordsAndForms.querySelector('#pages')).querySelector('#passwordSection');
list = Polymer.dom(page).querySelector('iron-list');
passwordItems = list.get('items');
asyncForEach(passwordItems, function () {
console.log(JSON.stringify(passwordItems, null, 4));
// Now you can save output in a text file!
}, function (item, index, next) {
passwordSection.passwordManager_.getPlaintextPassword(index, function (item) {
passwordItems[index].password = item.plaintextPassword;
next();
}.bind(passwordSection))
});
В ответ в той же консоли появятся все ваши сохранённые пароли и вы сможете их оттуда скопировать.
Chrome / Chromium версии 60 и ранее
Яндекс.Браузер версии по крайней мере до 17 (актуальной на момент написания)
Переключите вот эту chrome://flags/#password-import-export настройку в Enabled, перезапустите браузер, после этого идите в менеджер паролей — chrome://settings/passwords — там будет кнопка экспорта. Экспортирует csv вполне очевидного формата.
Firefox
Вроде, есть расширение Password Exporter, написанное сторонним разработчиком. Сам я код не читал, на отсутствие мошенничества не проверял (в отличии от элементарного кода для Chrome выше). Да и в любом случае в последнем Firefox 57 это расширение не работает. На форумах советуют для экспорта паролей откатывать версию Firefox на предыдущую, хотя есть ещё какое-то видео на Youtube, как заставить это расширение работать и под 57-м FF…
В общем, лучше не буду писать про то, чем сам не пользуюсь. То же касается Safari, Opera и всего что там ещё ниже по популярности.