Я хотел бы сделать простую систему входа / регистрации пользователя, используя PHP и mysql. Мне не нужно получать какую-либо информацию, кроме того, что необходимо для входа и выхода пользователя. Я хочу убедиться, что система защищена.
Способ, которым я сейчас понимаю, как он должен работать:
Постановка на учет
Пользователь вводит свой адрес электронной почты и пароль и пароль подтверждения.
Сценарий PHP гарантирует соответствие паролей и что адрес электронной почты является допустимым адресом и еще не находится в базе данных.
Он хэширует пароль вместе со случайной солью и сохраняет соль и полученный хешированный пароль в базе данных. (Является ли функция php md5 подходящей для этого? Я не совсем уверен, как эта часть работает.)
Сохраните код подтверждения электронной почты в базе данных и отправьте данный адрес электронной почты по ссылке на веб-сайт, содержащий этот код для проверки?
Авторизоваться
Пользователь вводит свой адрес электронной почты и пароль.
Сервер ищет электронную почту в базе данных и извлекает соль. Затем хешь соль с паролем, который только что предоставил пользователь, чтобы узнать, соответствует ли он таковой в базе данных.
Как заставить сеанс сохраняться после входа в систему. С помощью сеанса PHP? Печенье? Что следует хранить в cookie для запоминания пользователя между посещениями?
В основном я хотел бы просто проверить, что процесс, который я описываю, является точным и безопасным способом регистрации пользователя / входа в систему. Кроме того, что такое хорошие учебные пособия с дополнительной информацией.
Для этого подходит функция mp5 php?
MD5 больше не считается безопасным; рассмотрите использование нового встроенного пароля PHP с помощью алгоритма bcrypt с переменной вычислительной сложностью: PHP password_hash()
и password_verify()
.
Как заставить сеанс сохраняться после входа в систему. С php-сессией? Печенье? Что следует хранить в cookie для запоминания пользователя между посещениями?
В идеале вы должны использовать сессию PHP для поддержания состояния во время одного посещения, и если вы хотите иметь опцию «запомнить мой логин», вы должны использовать куки-файл, который содержит достаточную информацию для аутентификации возвращающегося пользователя и перезапуска нового сеанса , В 2004 году есть хорошая статья о лучших практиках в отношении файлов для входа в систему: Persistent Login Cookie Best Practice . Вы также можете быть заинтересованы в более современном (2015 г.) решении для надежного применения флажков «помни меня» .
Кроме того, я думаю, что все, что вы описали, в порядке.
Несколько замечаний по некоторым недостающим соображениям:
В PHP-сеансах обычно используются файлы cookie: идентификатор сеанса хранится как один.
Сессии могут быть захвачены; вы также должны предпринять шаги для уменьшения возможности (начните с чтения « PHP: предотвращение захвата сеанса с помощью токена, хранящегося в виде файла cookie? » и « Каков наилучший способ предотвратить захват сеанса? »).
Связано с захватом – это исправление , когда злоумышленник выбирает идентификатор сеанса. Существует два способа борьбы с этим: установите session.use_only_cookies (значение по умолчанию в PHP> = 5.3) и измените идентификатор сеанса, когда пользователь входит в систему с session_regenerate_id
.
Также см. Вопрос « Безопасность сеансов PHP » и статья « Руководство по безопасности PHP: сеансы ».
если вы хотите готовое решение
Пользовательский торт в php5
в значительной степени безопасный .. и стабильный.
Поскольку системы входа в систему являются неотъемлемой частью веб-сайта, вы попадаете, если его взломают. Если вы не делаете это в образовательных целях, я рекомендую найти систему, созданную кем-то, у кого есть опыт работы в этой области. Вы будете спать спокойно ночью.
Примером надежной встроенной системы входа является авторизация в баке , она написана для рамки Code Igniter. Возможно, вам захочется посмотреть, как этот парень разработал систему, чтобы получить идеи о том, что важно, если вы решите написать свои собственные.
Также, как только заметка из опыта, требуется больше времени для написания системы входа с нуля, чем для изучения схемы воспламенения кода и установки auth.
Вот рекомендация: рассмотрите возможность использования легкодоступной структуры, которая по своей сути обеспечивает такую функциональность. они проверяются и проверяются. взгляните на Кохану . Он имеет модуль Auth, который берет на себя проверку подлинности.