Во времена “дикого” интернета на почту приходило много спама, среди них было много фишинговых писем. Например: “Вам новое сообщение посмотрите по ссылке на сайте vkontate”; “Добавьте друзей на сайте Одноклассники”. Мама и другие родственники на это велись. Привязки к телефону тогда ещё не было, приходилось все время восстанавливать аккакунты, либо менять пароли. Наступил момент когда мне это надоело и захотелось решить проблему раз и навсегда.В голову пришла идея плагина типа Web OF Trust, но было какое-то подозрение, что красный индикатор не остановит родных от ввода пароля на левых сайтах. Подумав немного, придумал другую идею, написал скриптик и поставил в хром. Родным сказал пользоваться только хромом, пароли нигде не вводить, если автоматически не входит — значит сайт поддельный, заходить на нужный сайт через закладки. Некоторым не выдал и вовсе их пароли :).
Я написал расширения — Автологин. В состав входит всего 2 файла — manifest.json и content.js.
В manifest требовал доступ к нужным нам сайтам и прописал инжектируемый скрипт content.js, функционал у него простой.
Проверить url по маске, если подходит — то проверить DOM на наличие элементов формы логина по селектору, если нашлись — то заполнить данными и нажать кнопку submit.
Немного времени потратил чтобы прошерстить сайты mail.ru, vk, Одноклассники на наличие форм, затем еще по часу прописать каждому их логины и пароли.
Потом ещё мне подкинули ссылки на формы входа которые я пропустил. Добавил формы, обновил расширения (в то время Хром ещё не блокировал девелоперские расширения и они лежали распакованными в документах у каждого).
Сам тоже стал пользоваться. Добавил выбор аккаунта, если их много — это удобно( у Гугла тогда ещё не было возможности переключаться между аккаунтами). Плюс, дополнительная защита от троянов — если кто и пролезет, то про моё расширение никто не знает, хоть там и пароли открытым текстом лежат. Еще и браузеры могут друг у друга пароли с легкостью импортировать — это немного напрягает.
За время использования расширения ни у кого больше аккаунт не увели. Я обезопасил себя и родственников и вернул свое спокойствие. Сейчас же гугл заблокировал собственные расширения, и у всех оно отключилось. Но и люди стали грамотнее и осторожнее, и к нашему времени фишинг сошел на нет.
Вот вроде и истории конец, но черт меня дернул сделать нормальный пользовательский интерфейс для расширения. А всё потому, что один друг увидел, заинтересовался и попросил себе.
К сожалению так потом и не получилось ему его поставить…
И что там говорят про 20% усилий и 80% функционала? Так вот это все 95 на 5 вышло!
Если уж выпускать расширение в мир, то надо его довести до ума.
Требований выросло сразу куча:
- Шифрование данных, разные способы: для ленивых и для параноиков;
- Придумать структуру хранения данных, 1 аккаунт — много сайтов, много форм;
- Придумать систему обновления базы форм. Сайтов много, за всеми следить самому не получится;
- Синхронизация между браузерами.
Для шифрования нашел библиотеку github.com/mdp/gibberish-aes.
Для лентяев генерирую ключ, храню его в базе и им шифрую пароли.
Для параноиков шифрую ключ мастер-паролем.
Для умеренных параноиков — храню мастер-пароль в оперативке и больше не спрашиваю.
Кстати, не подскажете, насколько надежно такое шифрование?
Для хранения данных github.com/knadh/localStorageDB — что-то вроде mongoDb, обертка над localstorage, удобно делать импорт экспорт.
Для обновления базы форм использую github, при старте браузера проверяю репозиторий на обновления, таким образом можно будет назначить контрибьюторов, которые бу��ут обновлять базу.
Пользовательский интерфейс написал на JqueryUI с плагинами. Чтобы начать пользоваться, надо зайти на вкладку “Провайдеры” — выбрать провайдера, чей аккаунт Вы хотите сохранить, и заполнить форму.

Уровень шифрования — это настройка для халявщиков и параноиков. Уровень 1 и 2 не доступны пока не включить “Расширенную безопасность”( включить можно на вкладке настроек).
Расширенная безопасность обеспечивает дополнительное шифрование паролей.
Уровень безопасности 0 не обеспечивает безопасность паролей. Данные аккаунтов нельзя посмотреть открытым текстом, но специалист сможет расшифровать их без проблем. Пароли хранятся зашифрованными в базе, ключ шифрования также хранится в базе.
Уровень безопасности 1 обеспечивает безопасность паролей при соблюдении определённых условий: не оставлять открытым браузер после ввода ключа шифрования. Ключ шифрования запрашивается один раз и хранится в оперативной памяти браузера.
Уровень безопасности 2 обеспечивает максимально возможную безопасность паролей. Ключ шифрования запрашивается всегда, нигде не хранится используется только для расшифровки аккаунта и последующей авторизации.

Также здесь есть настройка — “использовать для множества аккаунтов одного провайдера”. Модальный диалог, затеняет всю страницу и показывает список аккаунтов, размер шрифта подстраивается, чтобы показать все аккаунты. Иконка-информер просто появляется в адресной строке, и только при нажатии на ней показывает меню выбора аккаунтов.

Резервное копирование сделано простой сериализацией базы данных в JSON, импорт, Экспорт в файл.
Для меня расширение удобно, постоянно пользуюсь. Исходники лежат на GitHub, может ещё кому-нибудь пригодятся. В webstore выкладывать не решился, вряд ли пропустят с такой функциональностью.
