Пароли – это неизменный атрибут информационной безопасности, особенно когда речь идет о сайтах и сервисах, хранящих персональные данные. Процедура аутентификации является обязательной для таких сайтов и сервисов. Современные пользователи, как правило, имеют большой набор учетных данных, и нередко сталкиваются с ситуацией, когда доступ к ресурсу невозможен, потому что учетные данные утеряны или забыты. Поэтому важно предусмотреть процедуру восстановления учетных данных. Восстановление учетных данных востребовано с помощью электронной почты. Существует несколько вариантов восстановления паролей с использованием электронной почты [1–3].
Одним из способов является отправка на почту, введенную ранее, уже сгенерированного пароля. Данный способ не является рациональным, т.к. не всегда удобно запоминать сгенерированный пароль. Кроме того, такой способ восстановления пароля не является на 100 % защищённым, т.к. пароли хранятся в открытом виде и при взломе почты пользователя злоумышленник получит доступ к аккаунту и информации, принадлежащей этому аккаунту.
Другой вариант – это предлагать пользователю самому задать новый пароль. При этом варианте либо изначально пользователь попадает на страницу с изменением пароля, либо после подтверждения почты. В любом случае в базу данных производится запись нового пароля только после подтверждения почты.
Второй способ является более защищенным – ввод пароля пользователем и запись его в базу данных после подтверждения почты пользователя.
Цель исследования: рассмотреть проблему восстановления утраченного пароля к сайту. Описать технологию процесса восстановления пароля посредством подтверждения почты на примере существующего сайта.
Материалы и методы исследования
Рассмотрим технологию реализации способа восстановления пароля с подтверждением электронной почты. Технологию восстановления пароля реализуем на примере организации доступа к сайту «Шоу-группа Паприка». Понадобится база данных, страница со ссылкой (от которой будет происходить адресация на изменение пароля), отдельная страница (для ввода нового пароля) и 2 файла с функциями обработки.
Результаты исследования и их обсуждение
В базе данных необходимо создать таблицу, в которой будут храниться следующие данные.
- Id (идентификатор/счетчик).
- E-mail – для записи почты пользователя.
- Password – для записи пароля поль- зователя.
- Reset_password_token – для записи ссылки.
Поле для записи пароля необходимо задать в формате varchar(32), т.к. для записи пароля в базу данных мы будем использовать функцию md5, которая возвращает хеш в виде 32-символьного шестнадцатеричного числа [4–5].
Далее переходим к созданию страницы, на которой будет расположена ссылка для перехода на страницу изменения пароля (далее будем называть ее «стартовой»).
На этой странице нам понадобятся поля для ввода логина и пароля, для авторизации пользователя и ссылка для перехода на страницу смены пароля. Фрагмент кода представлен на рис. 1.
Рис. 1. Фрагмент кода для страницы авторизации
Рис. 2. Код на ссылку для смены пароля
Как видно из фрагмента кода, который изображен на рис. 1, на форме нет ссылки для перехода на станицу. Эту ссылку имеет смысл вставить после формы. Код на эту ссылку представлен на рис. 2.
При нажатии на данную ссылку автоматически открывается следующая страница, в нашем случае у нее будет название new_password. На этой странице пользователь сможет ввести новый пароль.
Окончательный вид страницы авторизации изображен на рис. 3.
На странице смены пароля должны быть размещены следующие элементы (рис. 4).
- Поле для ввода логина.
- Поля для ввода пароля.
- Кнопка «Сохранить».
Поле для ввода логина нужно для идентификации пользователя. Полей для ввода пароля нужно 2, так как сначала пользователь вводит пароль, и далее для удостоверения, что пользователь ввел тот пароль, который хотел, нужно поле для повторения пароля. Для проверки на идентичность этих двух полей будем использовать язык программирования Javascript. Пример кода, выполняющего проверку на идентичность этих двух полей, представлен на рис. 5.
Рис. 3. Страница авторизации
Рис. 4. Страница смены пароля
Рис. 5. Проверка паролей на совпадение
В этом фрагменте кода производится проверка на количество символов – минимальное количество 6 символов, а максимальное 8. Если пароль не соответствует этому условию, то выводится ошибка. Если пароли не совпадают, то вводится сообщение об ошибке «Пароли не совпадают», и кнопка дезактивируется.
Фрагмент кода, приведенный выше, выполняет обработку полей password и confirm_password. Эти поля выводятся на экран с помощью тега <input>. Код для страницы new_password представлен на рис. 6.
Рис. 6. New_password
После заполнения полей и нажатия кнопки запускается файл edit_password.php, в котором происходит обработка запроса.
Для начала нужно записать адрес сайта, для этого используется встроенная функция php – $_SERVER[‘SERVER_NAME’].
Далее производится проверка на наличие данного логина в базе данных, если такой логин есть, то код выполняется дальше, иначе выводится ошибка «Такого пользователя не существует». Фрагмент кода представлен на рис. 7.
Рис. 7. Фрагмент кода файла edit_password.php
Если такой пользователь существует – записываем пароль и выбираем из базы данных e-mail, который был ранее присвоен пользователю. Далее составляем токен, который будет отправлен в письме на почту пользователя, составляем все элементы для отправки письма на почту. Код для составления письма представлен на рис. 8.
Рис. 8. Фрагмент кода для отправки письма
После отправки письма пользователь переадресовывается на главную страницу сайта. Если письмо не было отправлено, скрипт останавливается, и происходит запись ошибки в сессию. Пользователь получает письмо на почту, в котором говорится о том, что с аккаунта на сайте группы запрошено изменение пароля. Вид этого письма представлен на рис. 9.
Рис. 9. Вид письма для изменения пароля
Для того чтобы изменить пароль на сайте, пользователю нужно перейти по ссылке, которая указана в письме. Это нужно для подтверждения почты.
В письме указана ссылка, которая ведет на файл, который подтвердит почту и обработает запрос на обновление пароля в базе данных. Фрагмент кода на этот запрос продемонстрирован на рис. 10.
Как видно на рис. 10, сначала нужно получить данные о токене, почте и пароле из глобального массива, проверить их на наличие и пустоту.
Рис. 10. Фрагмент кода на подтверждение почты пользователя
Рис. 11. Фрагмент кода на обновление пароля
После того как данные успешно получены, их нужно идентифицировать с данными в базе данных, если же данные проходят проверку, то выполняется запрос на обновление пароля. Код на обновление пароля представлен на рис. 11.
После успешного обновления пароля пользователь автоматически попадает на главную страницу на сайте. И может авторизоваться уже с новым паролем.
Заключение
Каждый человек может забыть данные, необходимые для входа на какой-либо сайт. Для восстановления пароля способом, описанным в статье, необходимо иметь доступ к адресу электронной почты. Подтверждение электронной почты, указанной ранее при регистрации, позволяет повысить надежность парольной защиты.