mysql – Разъяснение по поводу авторизации. Как лучше организовать авторизацию PHP с COOKIE – Stack Overflow на русском

#1.2: connecting the database with php: – db.php

Now, we need to connect this database to our script. To do this, we will be using ezSQL as mentioned before. So, inside our db.php file, we place the following code:

#2: creating the login form: – login.php

So, we have used a plain and simple login form with valid xhtml markup. You can add your own css to it to make it look better. The things to notice are

  • The name and id of the fields should not change.
  • The form method should be post and action should be login-action.php.

#4: creating the login-action.php file:

As we have everything in our class, so creating the login-action.php file will be a breeze. All what we do is

#6: the logout.php file:

Everything seems to be incomplete without it! What we do is

  • Destroy the session.
  • Expire the cookie.
  • Redirect to login form.

Безопасная система авторизации

Однако, данная схема имеет недостаток – пароль используется в открытом виде, а это небезопасно. Всё что идёт дальше – только для ознакомления, пока это слишком сложно реализовать без хорошей архитектуры и полноценной базы данных.

Пишем код

Все исходники по данному заданию доступны здесь.

Продумываем архитектуру

Первое, о чём нам нужно подумать — это то, как будут храниться элементы этой системы, и сколько их вообще будет.

Начнем с простого — для начала у нас должно получиться 3 странички, которые мы описали в ТЗ.

Ещё нам потребуется функционал, который будет проверять, авторизован ли пользователь. Если мы перечитаем ТЗ, то поймём, что он используется в двух местах — и на главной странице и на странице авторизации. Значит, стоит вынести этот механизм в отдельный файл, и использовать его в двух местах сразу.

Разъяснение по поводу авторизации. как лучше организовать авторизацию php с cookie

мы “солим” пароль логином и сохраняем хеш-функцию в базе данных

Не надо так делать. Уже даже в ядро добавили функции специально для обработки паролей.

И не надо больше ничего с этим хешом делать. Нужен какой-то токен для чего-то? Есть random_bytes (и версия php не оправдание, в мануале есть ссылка на реализацию в пространстве пользователя).

Мы то в базу данных это значение куки записали навсегда. Оно из базы денных не удалится через день.
Поскольку пользователю время жизни куки доверять нельзя – значит вам нужно рядом с токеном хранить и время его жизни.

Соответственно при авторизации генерируете токен. Поскольку штука важная для безопасности – то только через CSPRNG, криптостойким генератором. Никаких rand, mt_rand или shuffle. Полученный токен сохраняете в какой-то хранилище на сервере. Могу назвать два варианта:

(табличка – понятие образное. Это можно хранить где угодно, а не только в РСУБД)

Не забудьте при смене пароля сбросить все токены. И не забудьте для кук выставить опциональные параметры, httponly точно, secure – если вы озадачились настройкой https.

Чисто для удобства можете ещё сохранить user_id в куку. Сама по себе публикация id опасности не представляет и зачастую id вообще публично-доступен, например, в url профиля на сайте, зато по нему искать проще.

Техническое задание

Начнём мы это дело с описания будущей системы. Пусть у нас будут следующие компоненты:

Форма авторизации

Давайте теперь сделаем форму авторизации — создаём файл login.php и для начала набрасываем саму HTML-форму. Шаблон получился следующим.

Давайте теперь добавим логику проверки переданных данных.

Хеширование паролей

В более совершенных системах авторизации используют хеш от пароля.

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

Но мы можем снова повторить над паролем те же действия и сравнить получившиеся значения. То есть сравниваются хеши, а не исходные пароли. И в базе данных тоже хранят хеши, а после того как от клиента пришел пароль в открытом виде, вычисляют его хэш и сравнивают со значением в базе. Если они равны – значит от пользователя пришел верный пароль.

Для чего это делается? Да просто потому, что если сайт будет каким-то образом взломан, то злоумышленник в базе данных не найдёт паролей в открытом виде – только хеши. А так как из хеша получить пароль довольно сложно (при условии, что хеш-функция надежна и используется надёжный пароль), то пароль он не узнает. Следовательно:

Заключение

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

https://www.youtube.com/watch?v=iNhtIzHl_4U

Ах да, чуть не забыл, все исходники к каждому уроку я для вашего удобства буду выкладывать на github – вот тут.

loader
Похожее:  личный кабинет: регистрация и вход

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *