ProfiPHPProfiPHP
Категория: Полезное в PHP

Простая и безопасная валидация пользователя

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

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

Реализуемая в нашем случае валидация будет работать с помощью механизма сессий. Это очень удобно и безопасно.

Обычно, для авторизации пользователя необходимо ввести логин и пароль. При правильной авторизации, запишем в сессию захэшованое алгоритмом Md5 значение логина и пароля:
$_SESSION['security'] = md5( 'admin'.'password' );
Как правило, у всех пользователей должен быть уникальный Логин или Email адрес. Вместо логина можно воспользоваться и почтовым ящиком.

Значит у всех авторизованных пользователей значение переменной Security будет разным. Алгоритм хэширования Md5 вернет 32 символа преобразованных с логина и пароля пользователя.

Ну а теперь необходимо проверить валидацию пользователя, а делается это так:
if ( ! isset( $_SESSION['security'] ) || ( isset( $_SESSION['security'] ) && md5( 'admin'.'password' ) != strval( $_SESSION['security'] ) ) ) {
exit( header( 'Location: /login.php' ) );
}
Теперь опишем очень подробно выше описан код, поскольку он выполняет очень важную роль.

Данное выражение состоит из двух частей:
! isset( $_SESSION['security'] )
и:
( isset( $_SESSION['security'] ) && md5( 'admin'.'password' ) != strval( $_SESSION['security'] ) )
Между ними стоит указатель "или".

Допустим, если пользователь не авторизован в системе, значит он не получит уникальную переменную переменную сессии Security. За это отвечает первая часть условия.

Вторая часть сработает в том случае, если переменная сессии существует. Сразу после проверки существования переменной следует сравнение ее с правильным значением, которое определяется алгоритмом Md5.

А теперь, чтобы убедится в правильности кода, приведем пример всех возможных вариантов:

1. Сессия не существует:
if ( ! isset( $_SESSION['security'] ) || ( isset( $_SESSION['security'] ) && md5( 'admin'.'password' ) != strval( $_SESSION['security'] ) ) ) {
равенство:
true || ( false && false ) = true || false = true
В результате сработает условие, и пользователя перебросит на страницу авторизации.

2. Сессия существует, но неправильная:
false || ( true && true ) = false || true = true
3. Сессия существует и указана правильно:
false || ( true && false ) = false || false = false
В результате, если сессия существует и она правильная, тогда не сработает условие перехода на страницу авторизации.

Еще обязательно использовать функцию Exit, чтобы остановить выполнение кода, который следует далее после условия. Также хорошим вариантом будет уничтожение сессии, это сэкономит место и даже немножко ускорит работу проверки.

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

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

Имя:
Текст комментария: