Intereting Posts

Система регистрации / регистрации с php и mysql

Я хотел бы сделать простую систему входа / регистрации пользователя, используя 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, который берет на себя проверку подлинности.