Система входа / регистрации с php и mysql - PullRequest
9 голосов
/ 25 октября 2010

Я хотел бы создать простую систему входа / регистрации пользователей, используя PHP и mysql. Мне не нужно получать какую-либо информацию сверх того, что необходимо для входа и выхода пользователя. Я хочу убедиться, что система безопасна.

В настоящий момент я понимаю, как это должно работать:

Регистрация

Пользователь вводит свой адрес электронной почты, пароль и пароль для подтверждения.

Сценарий PHP проверяет, совпадают ли пароли, и является ли адрес электронной почты действительным и его еще нет в базе данных.

Он хэширует пароль вместе со случайной солью и сохраняет соль и полученный хешированный пароль в базе данных. (Подходит ли функция php md5 для этого? Я не совсем уверен, как эта часть работает.)

Сохранить код подтверждения электронной почты в базе данных и отправить на указанный адрес электронной почты ссылку на веб-сайт, содержащий этот код для проверки?

Логин

Пользователь вводит свой адрес электронной почты и пароль.

Сервер ищет электронную почту в базе данных и получает соль. Затем хэширует соль с паролем, который пользователь только что предоставил, чтобы проверить, совпадает ли он с паролем в базе данных.

Как сохранить сеанс после входа в систему. С сессией PHP? Печенье? Что должно храниться в куки для запоминания пользователя между посещениями?

Мне просто хотелось бы убедиться, что описываемый мной процесс является точным и безопасным способом регистрации / входа пользователя. Кроме того, какие есть хорошие учебники с дополнительной информацией.

Ответы [ 5 ]

5 голосов
/ 25 октября 2010

Подходит ли функция php md5 для этого?

MD5 больше не считается безопасным;рассмотрите возможность использования более нового встроенного хэширования паролей PHP с алгоритмом bcrypt, который имеет переменную сложность вычислений: PHP password_hash() и password_verify().

Каксделать сеанс постоянным после входа в систему.С сессией PHP?Печенье?Что должно храниться в файле cookie для запоминания пользователя между посещениями?

В идеале вы должны использовать сеанс PHP для поддержания состояния во время одного посещения, и если вы хотите иметь «запомнить мойпараметр «вход в систему», вы будете использовать куки, который содержит достаточно информации для аутентификации возвращающегося пользователя и перезапуска нового сеанса.Вот хорошая статья 2004 года о лучших методах использования файлов cookie для входа в систему здесь: Рекомендации по использованию файлов cookie для постоянного входа в систему .Возможно, вас также заинтересует более современное (2015 г.) решение для безопасного внедрения флажков «запомнить меня» .

Кроме них, я думаю, все, что вы описали, подходит.

4 голосов
/ 25 октября 2010

Несколько замечаний по поводу некоторых пропущенных соображений:

Сеансы PHP обычно уже используют куки: идентификатор сессии сохраняется как единое целое.

Сессии могут быть угнаны;Вы также должны предпринять шаги, чтобы уменьшить вероятность (начните с чтения « PHP: предотвращение перехвата сеанса с токеном, хранящимся в виде файла cookie? » и « Каков наилучший способ предотвращения перехвата сеанса?").

С захватом связано исправление , когда злоумышленник выбирает идентификатор сеанса.Есть два способа борьбы с этим: установить session.use_only_cookies (по умолчанию в PHP> = 5.3) и изменить идентификатор сеанса, когда пользователь входит в систему с помощью session_regenerate_id.

Также см. Вопрос « PHP Session Security » и статью « PHP Security Guide: Sessions ».

2 голосов
/ 25 октября 2010

если вы хотите готовое решение

Торт пользователя в php5

в значительной степени безопасно .. и стабильно.

1 голос
/ 25 октября 2010

Вот рекомендация: рассмотрите возможность использования легкодоступной среды, которая по своей природе обеспечивает такую ​​функциональность.они испытаны и проверены.взгляните на Кохана .У него есть модуль Auth, который обеспечивает аутентификацию.

1 голос
/ 25 октября 2010

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

Пример надежной предварительно созданной системы входа в систему: tank auth , написано для платформы Code Igniter.Возможно, вы захотите посмотреть, как этот парень разработал систему, чтобы получить идеи о том, что важно, если вы решите написать свою собственную.

Кроме того, просто заметка из опыта, для написания системы входа в систему требуется больше времени, чем для изучения структуры воспламенителя кода и установки аутентификации в баке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...