24.11.2018 10:16
Occul
 
Если вдруг вам пришла в голову здравая мысль начать хранить пароли от всяких сайтов в нормальном месте*, отказавшись от достаточно ненадёжного хранения «прямо в браузере», вы столкнётесь с проблемой: а как же добыть из браузера все свои пароли? Та же самая проблема возникает, если вы вдруг решаете сменить браузер.

По-хорошему этой проблемой надо озадачиваться раньше: начиная помещать куда-то ценную информацию, полезно на ранних стадиях подумать, как её оттуда извлекать, если понадобится. Но думать заранее (в общем случае — «мыть тарелки после еды, а не перед») — это, как это ни странно, не самый простой навык, обучение которому завершить невозможно (есть, конечно, люди, которые и не пытаются, но сейчас речь не о них).

Так вот про извлечение паролей. Все браузеры позволяют копировать данные из своего менеджера паролей. Поштучно. И вот когда вы по одному добудете все свои пароли — вы научитесь заранее интересоваться возможностью извлечения информации ;)

Ну а если вам кажется, что этот урок уже усвоен (ну-ну…), можете извлечь их оптом.

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 и всего что там ещё ниже по популярности.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.