Pull to refresh

StoreBirds — главный конкурент для LastPass

Reading time 6 min
Views 1.6K
Привет, Хабр. Наконец-то пришло время познакомить вас со своим проектом под названием "StoreBirds". Он являет собой свободный менеджер паролей и заполнитель форм в виде плагина для браузера «Chrome». Давайте я расскажу вам что мотивировало мною к созданию «StoreBirds», какие его основные особенности и почему меня не привлекла идея использования в качестве менеджера паролей столь популярный «LastPass»…

Почему не «LastPass»

Конечно вы можете со мной не согласится, но мне «LastPass» не очень симпатичен и вот почему:
  • То количество настроек и фич, чем буквально напичкан интерфейс «LastPass», как бы, не очень способствует его удобному использованию. Да, возможно это дает ему некую гибкость, но нужна ли та гибкость обычному пользователю? Я, лично, являюсь обычным пользователем и люблю, когда все просто и понятно, но при этом вовсе не пренебрегая надежностью и безопасностью.
  • Некорректная работа с некоторыми WEB-ресурсами, например, неправильно работает заполнение формы регистрации на battle.net. (да-да, я так же, как и многие, очень люблю игры «Blizzard», в частности «StarCraft» :) ) или заполнение форм регистрации некоторых сайтов на движке «GWT», к примеру ppc.clickbro.com. Вы можете сами легко в этом удостовериться, при чем, используете вы горячие клавиши или мышь — совсем не имеет значения.
  • Немалую роль играет психологическая и, возможно, немного излишне параноидальная сторона вопроса о том, какой софт хранит вашу личную информацию, в каком виде, и может ли он скомпрометировать ваши данные.

Согласитесь, было бы здорово пользоватся открытым софтом или, еще лучше,- если бы его серверная часть находилась бы на вашем хосте. Что ж, в любом случае, в том числе благодаря аргументам више, я решил написать свой проект менеджера паролей для любимого браузера «Chrome».
Перед написанием плагина я выделил для него три основных условия: безопасность, надежность, удобство.

Безопасность

Общие особенности безопасности системы:

  1. Сервер выступает в роли «черного ящика», то есть хранит на себе только и только зашифрованную информацию, и никаких ключей (логинов/паролей).
  2. Все операции кодирования и декодирования осуществляются строго на стороне клиента под средством AES256 (в роли мастер-пароля выступает пароль пользователя).
  3. Авторизация пользователя на сервере проходит только по хешу логин\пароль\соль- hash1_function(login,password,salt1).
  4. Каждый запрос, содержащий в себе какое-либо действие,- уникальный и содержит рандомную динамическую составляющею, правильная обработка которой возможна только на стороне сервера и клиента,- это дает дополнительную защиту от проснифования запроса и выполнения его повторно.
  5. Соединение с сервером может проходить как по HTTP так и по HTTPS (тип соединения можно выбрать в настройках плагина), это не будет играть столь существенной роли, поскольку и так все данные гоняются зашифрованными, но если, все же, есть возможность подключиться через HTTPS, то используйте этот режим.
  6. Все важные поля базы данных на сервере подвергаются локальному AES256 шифрованию, основная часть ключа, которого, задается в соответствующей переменной файла-конфига исходников серверной части.

Регистрация пользователя

Регистрация нового пользователя в системе происходит следующим образом:
  • На стороне клиента берется хеш от логина и пароля по функции hash1_function(login,password,salt1) и отправляется на сервер,- этот хеш будет использоваться для авторизации запросов в системе от клиента к серверу, для данного пользователя.
  • Так же на стороне клиента создается секретный хеш sec_hash функцией hash2_function(login,password,salt2),- этот хеш отправляется на сервер только в случаях создания нового пользователя или изменении пароля пользователя- больше никогда, и берет участие в формировании уникальности каждого запроса от клиента к серверу.

Обмен данными между клиентом и сервером:

Согласно пункту «4», в общих особенностях безопасности системы,- каждый запрос от клиента к серверу, содержащий в себе какое-либо действие, должен быть уникальным. Эта уникальность достигается за счет введения в него динамической составляющей, правильная обработка которой возможна только на стороне сервера и клиента, и зависит от секретного хэша(sec_hash). Динамическая составляющая определяется по функции hash3_function(sec_hash,random_key,salt3), где random_key запрашивается у сервера. Общая схема работы такова:
  • клиент -> сервер — запрос клиента на сервер для получение случайного ключа (random_key) для следующего запроса.
    клиент получает случайный ключ и на основе его формирует динамическую составляющею по функции hash3_function(sec_hash,random_key,salt3).
  • клиент -> сервер — запрос от клиента на сервер с шифрованным контентом, содержащим в себе какое-либо действие, и сформированной динамической составляющей.
    Сервер, получив такой запрос, сравнивает динамическую составляющею пришедшего запроса с динамической составляющей, сформированной по такому же алгоритму на своей стороне, и если они совпадают- сбрасывает случайный ключ для этого соединения и разрешает провести действие согласно контента запроса.

В плагине логин и пароль пользователя могут хранится либо в localStorage, в зашифрованном виде, либо в голове самого пользователя. Конечно, в голове понадежнее, но для удобства лучше сохранять в localStorage, таким образом при каждом запуске браузера плагин автоматически будет авторизироваться. После того как авторизация плагина проходит, он тянет с сервера все данные и работает с ними у себя в памяти, не скидывая в локальную базу данных. Как по мне, чем меньше хранится информации локально- тем лучше. К вопросу о восстановлении логина\пароля, при их потере пользователем, я отнесся негативно, ведь тогда на сервере придется их хранить, а это уже противоречит определению сервера как «черного ящика». Но все же я включил возможность напоминания логина и пароля на емейл при регистрации нового пользователя по его желанию, то есть если пользователь хочет чтоб было включено напоминание, то его логин и пароль отправляются на сервер для хранения, если нет- то нет, такое условие происходит один единственный раз только при регистрации нового пользователя, кроме того, если пользователь меняет пароль, то автонапоминание для него отключается и в базе поля с логином, паролем и емейлом затираются.

Надежность

Проект «StoreBirds» полностью написан на JavaScript и PHP, его клиентская часть представляет собою плагин под «Chrome» и выполнена на чистом JavaScript. Каждая новая написанная функция тщательно тестировалась и, впоследствии, составленные мною тест-кейсы обычного юзабельного, и нагрузочного тестирования были пройдены на отлично. Серверная часть также прошла успешно все тесты и представляет собою связку Apache(or Nginx)+PHP+MySql- самая распространенная связка в Мире.:):):)

Удобство

На разработку интерфейса и возможностей «StoreBirds» повлияла моя собственная философия: «Будет удобно мне -будет удобно всем». Я не буду вдаваться в подробности и описание интерфейса, поскольку вы сами можете попробовать его в работе. Возможно, кому-то интерфейс может не понравиться — всем не угодишь, но, надеюсь, многим все же удастся :). Что касается интересных фишек, то была добавлена функция блокировки аккаунта пользователя и его разблокировки по паролю, сделано это для того, чтоб за время вашего отсутствия за компьютером вашим аккаунтом никто воспользовался не смог (блокировка происходит на сервере). Этот самый пароль разблокировки вы сами можете назначать в настройках аккаунта. Также было сделано удобное представление пользовательских сохранений в виде разворачиваемого списка. В принципе «StoreBirds» обладает всеми необходимыми функциями, вы можете ознакомиться с ними лично, изучив сайт проекта, и попробовав его в работе.

Сервис StoreBirds

Сайт storebirds.com выступает в качестве готового, официального ресурса. Уже есть доверенный SSL сертификат и надежная мощная платформа для работы. Всем добро пожаловать. Так же вам будет доступна возможность установки серверной части у себя на хосте (если он у вас есть). Для этого всего-навсего должна быть настроена связка Apache(or Nginx) + PHP +MySQL и в конфиге скачанного исходника серверной части проекта StoreBirds буквально вбить параметры для авторизации к вашей СУБД MySql, так же надо запустить скрипт инсталла базы данных. Все! Впрочем на самом сайте на страничке «storebirds.com/storebirds/user/begin_to_use.php» все написано. Если нет своего хоста, то пользуйтесь официальным «storebirds.com». Любые вопросы, пожелания, замечания, предложения отправляйте емейл: askstorebirds@gmail.com или заполняйте форму на странице «storebirds.com/storebirds/user/support_page.php» (для заполнения формы нужно быть зарегистрированным в системе).

Спасибо за внимание!
P.S. Следите за обновлениями, по-скольку будут добавляться новые возможности сервиса (согласно пожеланиям пользователей).
Я постараюсь всем ответить на ваши вопросы.

Продолжение: http://habrahabr.ru/blogs/google_chrome/138669/
Tags:
Hubs:
+12
Comments 84
Comments Comments 84

Articles