Предлагаю вариант простой двухфакторной аутентификации

в 23:35, , рубрики: web-разработка, безопасность в сети, безопасность веб-приложений, Веб-разработка, информационная безопасность, метки: , ,

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

На данный момент существуют как минимум три наиболее популярных способа получения такого одноразового пароля-кода:
1. Вам его высылают по SMS на зарегистрированный на сайте номер телефона.
2. Вам его генерирует специальное устройство типа eToken, зарегистрированное на сайте.
3. Вам его генерирует программа, которую вы скачали с сайта при регистрации и установили на ваш мобильный телефон.

Но все эти способы не очень подходят для небольших сайтов, с так сказать не очень критичной для пользователя информацией:
1. Рассылать SMS могут позволить себе только весьма «доходные» сайты.
2. Покупать eToken для входа к примеру на любимый форум мало кто согласиться.
3. Далеко не у всех есть телефоны, на которые можно установить дополнительный софт, да и сайту придется потратиться чтобы создать/купить такую программу для большинства возможных моделей телефонов.

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

... x c h e f
-------------
8 | g f i m p
4 | j 9 h n v
5 | k s l w 7
1 | q x y 4 d
9 | 6 a z 3 t

Такую табличку можно распечатать, но несложно и просто один раз записать на листке бумаги и носить всегда при себе например в кошельке.
При входе на сайт, пользователя в форме входа просят кроме логина и пароля ввести дополнительный код, а рядом с этим полем показывается картинка типа каптчи с таким содержанием «x4-c1-e8-h9».
Это означает, что пользователь должен посмотреть в свою таблицу, определить подобно нумерации ячеек в экселе нужные символы и ввести код «jxmz».
При ошибке пользователя код меняется, ну и применяются все обычные меры для распознавания взлома.

Таким образом даже если пользователь зайдет на сайт с компьютера на котором есть «шпионский» софт, все что «шпиону» достанется это только четыре символа из таблицы в 25 символов. Т.е. при правильной генерации кодов это практически ничего не дает. Главное, чтобы пользователь понимал, для чего используется этот метод, и как он работает. Что это не «панацея» и надо как можно чаще менять пароль и такую таблицу. Желательно как можно быстрее после пользования «ненадежным» компьютером и делать это только с «надежного» компьютера.

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

Автор: AlexTest


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js