Вопрос по сессиям и авторизации (PHP)

Р
На сайте с 17.05.2011
Offline
136
894

В Интернете полно статей, знаю. Но что-то мне они все тяжеловато даются в связи с тем, что у меня как-то нет в голове полной картины. Вернее, она у меня есть, но я не уверен в ее правильности. Может быть я что-то концептуально упускаю или искажаю.

Итак, ниже я бы хотел описать как я понимаю процесс. Вы подправьте меня, если что, а в деталях я уже тогда сам легко (я надеюсь) разберусь. Ну или снова сюда прибегу с вопросами :)

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

2) Подсовывает (или редиректит) ему страницу авторизации, где юзер вводит пару логин/пароль и отправляет их на сервер (по желанию, браузер клиента может захэшировать пароль)

3) Сервер проверяет данные на валидность и, если все хорошо, создает ему уникальный идентификатор сессии (который на стороне сервера можно сохранить в отдельной таблице или в специальном столбце таблицы users) и выдает клиенту кукис с эказанным идентификатором + редирект на закрытую страницу.

4) Браузер клиента сохраняет идентификатор сессии в кукисах и будет его каждый раз выдавать серверу при запросе новых данных.

5) При нажатии "Выход" сервер просто обнуляет сессию. Либо сессию можно обнулять автоматически по истечении некоторого времени.

Пока писал все это все же возникли вопросик: Все, что я описал выше - легко кодится и вроде бы у меня для этого знаний хватает. Однако, в PHP есть встроенный механизм поддержки сессий: он делает все то, что я описал выше? Это как-то может мне упростить задачу? Или лучше не связываться?

Спасибо заранее!!!

danforth
На сайте с 18.12.2015
Offline
153
#1

Более-менее правильно.

1. Помнить о том, что все, что приходит с клиента - не безопасно!

2. Тот процесс что вы описали, все же аутентификация а не авторизация.

3. Аутентификация должна проходить по токенам.

4. Для проверки хешей паролей использовать password_hash() и password_verify(), и никаких ==.

Ещё про http://www.php-fig.org/psr/psr-7/ можете почитать.

Junior Web Developer
Р
На сайте с 17.05.2011
Offline
136
#2
danforth:
Более-менее правильно.

1. Помнить о том, что все, что приходит с клиента - не безопасно!
2. Тот процесс что вы описали, все же аутентификация а не авторизация.
3. Аутентификация должна проходить по токенам.
4. Для проверки хешей паролей использовать password_hash() и password_verify(), и никаких ==.

Ещё про http://www.php-fig.org/psr/psr-7/ можете почитать.

2. Да, пожалуй, аутентификация. Не задумывался о таких тонкостях.

3. Вы пишете "Аутентификация должна проходить по токенам" - вы не поясните что вы имеете в виду? Что за токены?

4. Пробежался по мануалам этих функций и что-то не уловил чем это может быть луче md5(), например?

A
На сайте с 23.11.2016
Offline
7
#3
Рамарио:
4. Пробежался по мануалам этих функций и что-то не уловил чем это может быть луче md5(), например?

http://php.net/manual/ru/faq.passwords.php - вот тут написано

danforth
На сайте с 18.12.2015
Offline
153
#4

если коротко, то тут неплохо изложено http://getjump.me/ru-php-the-right-way/#Безопасность

Р
На сайте с 17.05.2011
Offline
136
#5
anzarsh:
http://php.net/manual/ru/faq.passwords.php - вот тут написано

Спасибо за ссылочки! Обе очень полезные и познавательные!

---------- Добавлено 23.01.2017 в 15:20 ----------

danforth:
если коротко, то тут неплохо изложено http://getjump.me/ru-php-the-right-way/#Безопасность

Спасибо большое!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий