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

Это обновление, отличается от предыдущих. Сразу приведу короткий список изменений, в текущем обновлении:

  • Регистрация и авторизация пользователей.
  • Автоматическое определение языка пользователя.
  • Под модальными диалогами появилось затенение, блокирующее случайные нажатия мимо диалога.
  • Главное меню отображается поверх диалогов.
  • Созданы новые детали для строительства кораблей.

Начну свой рассказ с момента, почему у меня ушла дополнительная неделя, на создание системы регистрации. Мы все знаем, что почти на каждом сайте есть регистрация. Но, не всегда обращаем внимание, на то, что наши пароли гуляют в открытом виде. Даже протокол https, не сможет нас защитить, от их хищения. Почти на каждом сайте, пароли шифруют только на стороне сервера. Используют по большей части md5, уже реже sha-1 и другие алгоритмы. Так в чем же опасность? (Есть хорошая статья в журнале «Хакер»: Все методы взлома MD5) Во первых, с сайта могут украсть базу данных паролей и восстановить все пароли пользователей, которые, есть в ней. Бывает, что шифрования вообще нет и на сайте пароли лежат в открытом виде. Но вернемся к браузеру, если компьютер или браузер будет заражен трояном/вирусом или вы случайно оставите свой пароль на компьютере друзей или еще где, пароли с легкостью утекут и ими смогут воспользоваться злоумышленники. Более интересная часть, все твердят — протокол https вас спасет, увы это не так, да он спасет от перехвата трафика, но не от троянов, вирусов и плагинов которые могут быть установлены в браузере, либо на компьютере и иметь прямой доступ к вашим паролям.
Ну что, готовы? Давайте рассмотрим примеры, начнем прогулку с социальной сети «В контакте» (я мог выбрать и другую социальную сеть или просто сайт). Но «В контакте», больше всех радует своей защитой. Может после прочтения текста, они переделают свою авторизацию и регистрацию. Сегодня 5 марта 2016 года и мы приступаем к тесту, открываем контакт и переходим в режим отладки F12:
vk-testiruem-yiazvimosti

Шаг первый, введем вместо логина 123456789, а вместо пароля 987654321. И посмотрим, как эти данные, будут отправлены на сервер (в браузере хром — F12, далее, перейти на вкладку Network).
vk-yiazvimost-parolia

И что мы видим, данные пошли по протоколу http в открытом виде, еще и без шифрования (Такое случается постоянно, не каждый человек знает, что нужно руками вводить https:// для перехода на защищенный протокол). Для социальной сети такого масштаба, это очень плохо, так как пароли гуляют в открытом виде и к ним они придут, так же, в открытом виде. Не ясно, как они будут использованы сотрудниками или компанией.

Посмотрим как же у нас обстоят дела? Введем логин abc@mail.ru, а пароль 987654321.
dreams-gate-password-protection

Пароль не похож на свое начальное представление, на вид как MD5, но так ли это? (Есть несколько десятков утилит, вы можете самостоятельно посмотреть, получится ли у вас из этого вытащить свой реальный пароль).

Но это еще далеко не всё, а что будет если мы опять попробуем зайти под нашим логином и паролем? Введем логин abc@mail.ru и пароль 987654321.

dreams-gate-strong-password-protection
Пароль изменился?! Это покажется странно, на первый взгляд, но чтобы защитить ваши данные приходится применять необычный подход.

Подведем итоги: Так как, нам не важно какой у человека пароль, главное, чтобы введя свои данные, пользователь смог войти в систему. По этому, мы можем преобразовать пароль в другой вид, разрушив его оригинальную структуру. Все пароли шифруются на стороне клиента (в браузере), а после отправки еще и на стороне сервера. Таким образом «реальный пароль» был зашифрован еще до отправки на сервер. Для шифрования пароля воспользовался SHA-3 Кечак (Keccak), в измененном виде, также обернул его под MD5, чтобы добавить любителям взлома «видимую легкость». Конечно этот подход совершенно не гарантирует 100% защиты, любую систему можно взломать, но такой подход, в разы, затруднит получение доступа к вашему «реальному» паролю.

Ссылка на проект: play.dg8.ru