Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Авторизация на сайте: ключевые моменты

#веб_программирование #авторизация


Понимаю, что по теме авторизации на просторах интернета море информации, но всё таки
решусь задать один вопрос. Без каких ключевых моментов нельзя обойтись, делая регистрацию
на своём сайте? Авторизация через сессии. Задавая этот вопрос, рассчитываю на ответ
примерно вот в таком виде:


Пароль в базе данных хранить в зашифрованном виде.
При авторизации сохранять время логина, IP и т. д.
Проверка залогинен/нет должна проводиться не только как isset($_SESSION['username']),
а.. А кстати, как это делать?


P.S. Нет, меня не забанили в поисковых системах, но я хочу услышать на словах, что
нужно делать, а не разбираться в тоннах чужого кода, гадая, зачем же он нужен.. 
Спасибо.^^
UPD: тем не менее кто может вкратце дать ответ на вопрос, как же начинающему, но,
я надеюсь, перспективному проекту реализовать авторизацию на сайте?
UPD: вопрос закрыт, в связи с отсутствием новых записей. Надеюсь кто-нибудь подчеркнет
из всех этих дискуссий нечто полезное для себя)    


Ответы

Ответ 1



Давайте я пока попробую обобщить, что у нас получилось, а дальше как получится, может кто-то представит нам другой вариант.. Итак, поехали, некоторые общие выводы: Авторизация с помощью сессий не годится, так как она не будет работать, если сайт физически находится на нескольких серверах (сам не знаю, но так сказал @BOPOH). Соответственно если мы рассчитываем, что наш сайт будут любить тысячи людей, надо сразу выбирать другой способ. Исходя из первого, начинаем искать другую реализацию. Так вариантов много, были предложены варианты с БД и memcache.(опять же ВОРОН'ом). Я для себя решил, что сейчас буду делать через базу данных, просто потому, что для меня на данный момент это проще(я же только начинаю постигать азы вебдева). Как же сделать авторизацию через бд? Очевидно, алгоритм, упрощённый до минимума таков: Пользователь вводит логин и пароль, пароль сравнивается с паролем на сервере, если они одинаковы, в специальную таблицу заносятся данные о текущем логине. Пока точно не знаю, какие именно данные понадобятся, но я так думаю что это будут: IP-адрес пользователя, время логина, уникальный ключ данной сессии(отныне употреблять это слово я буду в значении "процесс пребывания пользователя на сайте в залогиненном состоянии", $_SESSION тут уже не при чём). Этот же ключ будет заноситься в cookies. Далее при загрузке каждой страницы браузер будет обращаться к серверу по этому ключу, и оттуда возвращать данные о логине. Теперь о безопасности. Естественно, в базе данных не может храниться сам пароль, а должен храниться только его хеш, то есть зашифрованная неким алгоритмом(лучше без возможности дешифровки) строка. Самый распространённый пример - функция md5(). Только желательно использовать её в таком виде: md5($pass.$salt), так как существует куча сайтов-дешифровщиков обычных md5-строк. Далее со слов @avp: ключ должен перевычисляться независимо сервером и клиентом при каждом обмене. И сервер сравнивает присланный клиентом ключ с ожидаемым. Также для важной информации хэш пароля пересылать по сети нельзя. И еще, желательно как-то проверять, что сервер с которого Вы получили картинку на экран - это не подстава. Решение о необходимости использования этих советов, а также способы реализации оставлю за вами, уважаемые rодеры. Для себя выберу первые два пункта(мой и первый пункт @avp). Дополняйте меня)

Ответ 2



(я же только начинаю постигать азы вебдева) Если вы начинающий WEB-разработчик, советую не заморачиваться с всеми возможными session handler'ами.. Используйте стандартную работу сессий (через куки). В случае, если куки будут отключены, то PHP сам изменить поведение сэссия (через GET параметр). Непосредственно по поводу вашего вопроса: 1. С точки зрения безопасности, лучше пароль хранить зашифрованным. Но при таком подходе, если пользователь забудет пароль, вы не сможете ему напомнить его старый пароль. вам прийдется генерировать новый. 2. При авторизации сохраняйте любую нужную вам информацию.. Это может быть не только время и ip, а также и referer (т.е. с какого сайта пользователь пришел к вам на сайт) Тут никаких ограничений, лишь ваш полет фантазий )) 3. Для большинства случаев, вполне хватает проверки if(isset($_SESSION['is_auth']) and $_SESSION['is_auth'])... Со временем, когда вы "подрастете" в плане программирования, можно будет заглянуть как сделана аутентификация у "больших".. К примеру Security Component в Symfony

Комментариев нет:

Отправить комментарий