Как сделать авторизацию на сайте html с помощью php

Безопасный метод авторизации на PHP

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

Модель авторизации:

Клиент
Сервер MySQL

При регистрации в базу данных записывается логин пользователя и пароль(в двойном md5 шифровании)

При авторизация, сравниваеться логин и пароль, если они верны, то генерируеться случайная строка, которая хешируеться и добавляеться в БД в строку user_hash. Также записываеться IP адрес пользователя(но это у нас будет опциональным, так как кто-то сидит через Proxy, а у кого-то IP динамический. тут уже пользователь сам будет выбирать безопасность или удобство). В куки пользователя мы записываем его уникальный индетификатор и сгенерированный hash.

Почему надо хранить в куках хеш случайно сгенерированной строки, а не хеш пароля?
1. Из-за невнимательности программиста, во всей системе могут быть дырки, воспользовавшийсь этими дырками, злоумышленик может вытащить хеш пароля из БД и подставить его в свои куки, тем самым получить доступ к закрытым данным. В нашем же случае, двойной хеш пароля не чем не сможет помочь хакеру, так как расшифровать он его не сможет(теоретически это возможно, но на это он потратит не один месяц, а может быть и год) а воспользоваться этим хешем ему негде, ведь у нас при авторизации свой уникальный хеш прикрепленный к IP пользователя.
2. Если злоумышленик вытащит трояном у пользователя уникальный хеш, воспользовать им он также не сможет(разве если только, пользователь решил принебречь своей безопастностью и выключил привязку к IP при авторизации).

Реализация

Структура таблицы `users` в базе данных ‘testtable’

register.php

login.php

check.php

logout.php

Для защиты формы логина от перебора, можно использовать капчу или временную задержку на повторную авторизацию.

Автор: http://jiexaspb.habrahabr.ru/. Адаптация под PHP 5.5 и MySQL 5.7 KDG.

Куки с флагом HttpOnly не видны браузерному javascript-коду, а отправляются только на сервер. На практике у вас никогда нет необходимости получать их содержимое в javascript. А вот злоумышленнику, нашедшему XSS — а XSS так или иначе когда-нибудь где-нибудь найдется — отсутствие HttpOnly на авторизационных куках доставит много радости.

Источник

Простая авторизация на PHP.

В этой статье мы напишем очень простую авторизация на web странице. Мы не буде использовать базы данных и т.д. Все будет очень лаконично и просто.

Допустим у нас есть страница index.php на которую могут заходить только авторизованные пользователи. Для ограничения доступа мы будем проверять есть ли сессии для этого пользователя или если проще, авторизован пользователь. Создадим файл и запишем в него такой код :

header(«Location: login.php»); # производим редирект пользователя на страницу login.php

Ну и за одно создадим страницу авторизации login.php :

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

Следующим этапом мы добавим обработчик данных из формы. Который будет принимать и сравнивать данные из формы. В этом примере у нас будет только один пользователь и хранить логин\пароль мы будем прям в этом же файле. Пароль будет в зашифрованном виде c помощью функции md5(). А что бы узнать узнать хеш пароля попробуйте выполнить код echo md5(‘mypass’); 😉 Делать это мы будем по условию — только в том случае, если нажата кнопка формы.

У кнопки есть имя («submit»), а данные мы передаем методом post. Соответственно, мы можем просто проверить, существует ли элемент submit в массиве $_POST. Если есть — кнопка была нажата, и мы будем выполнять действия по проверке присланных данных, иначе — ничего делать не будем.

В файл формы (login.php) в самое начало добавим код :

Когда создается сессия, PHP генерирует уникальный идентификатор, который представляет собой случайную строку.Все переменные сессии хранятся на сервере во временном файле.
Сервер отправляет на компьютер пользователя куки, называемые PHPSESSID, для хранения строки уникального идентификатора сессии.
Когда пользователь закрывает браузер, сессия PHP закрывается автоматически. Иначе сервер завершит сессию по истечении заданного периода времени.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Система авторизации с помощью cookie на PHP

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

В прошлом уроке мы изучили механизм взаимодействия с cookie в языке PHP.

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

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

Решение

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

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

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

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

Пишем код

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

База данных

Ну вот, всё продумали, осталось только написать. Предлагаю начать с нашей базы данных. Создадим файл usersDB.php и запишем в него несколько пользователей.

Функции проверки авторизации

Давайте теперь напишем функцию, которая будет проверять, являются ли переданные в неё логин и пароль правильными. Для этого создадим ещё один файл auth.php. В нём нам для получения списка пользователей потребуется подключить файл с базой данных.

В цикле мы пробегаемся по базе данных пользователей и пытаемся найти пользователя с переданными логином и паролем. Если такой пользователь в массиве найден — возвращаем true. Иначе — false.

Давайте теперь ещё напишем функцию, которая будет возвращать логин текущего пользователя. Эта функция будет проверять текущие значения cookie с ключами login и password с помощью уже существующей функции checkAuth. При этом если пользователь найдётся, то она вернёт его login, а иначе — null. Назовём эту нашу новую функцию getUserLogin.

На этом всю логику проверки логина мы описали. Теперь займёмся непосредственно страничками.

Главная страница

Создадим файл index.php. Для простоты примера мы будем использовать только строку с приветствием авторизованного пользователя, либо ссылкой на авторизацию. В этой странице нам потребуется функция проверки авторизации через cookie, поэтому здесь нужно подключить файл auth.php.

Наша главная страничка готова. Можно зайти на неё и убедиться, что мы не авторизованы.

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

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

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

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

Логика простейшая — если был отправлен POST-запрос, проверяем правильные ли логин и пароль были переданы.

Если же авторизация прошла успешно, мы устанавливаем cookie с ключами login и password, в которые помещаем значения из POST-запроса. После этого выполняем редирект на главную страницу.

Редирект делается с помощью заголовка в HTTP-ответе. Этот заголовок называется Location и выглядит следующим образом:

Для формирования заголовков в PHP используется функция header – ознакомиться с ней более детально вы можете здесь.

Теперь можно попробовать нашу страничку в действии. Давайте для начала введём несуществующую пару логина и пароля. Например, 123:123.

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

Мы увидим соответствующую ошибку.

Теперь давайте зайдем под пользователем user. В нашей БД для него указан пароль 123. Пробуем.

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

Успех! Нас автоматически перекинуло на главную страницу, где мы видим приветствие для данного пользователя!

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

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

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

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

Авторизационные токены

Помимо хеша пароля в базе данных так же принято хранить так называемые авторизационные токены (AuthToken). Это комбинация символов (желательно подлиннее и с кучей кракозябр), которая генерируется при успешной авторизации пользователя и сохраняется в базе данных. А ещё она и пользователю отправляется.

Заключение

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

Источник

Как с помощью PHP и MySQL создать систему регистрации и авторизации пользователей

Хотя в Интернете есть много пособий на эту тему, большинство из них предназначено для продвинутых пользователей.

Эта статья расскажет о том, как создать простую версию системы авторизации и регистрации пользователей с использованием PHP и MySQL для начинающих. Давайте начнем!

Ресурсы, необходимые для работы с этим руководством:

Что мы создаем

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

Настройка сервера

Вы можете использовать любой хостинг с поддержкой PHP и MySQL ( только убедитесь, что он поддерживает PHP версии 5.3 или более поздней и MySQL версии 4.1.3 или более поздней ).

Шаг 1 – MySQL

Взгляните на приведенный ниже код SQL :

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

Шаг 2 — Разметка

С помощью этого кода вы получите результат, который показан на рисунке ниже:

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

С помощью этого кода вы получите следующий результат:

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

Этот код даст нам следующий результат:

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

Шаг 3 — CSS

К этому времени, вы уже должны получить тот же результат, что и на изображении, приведенном в начале статьи.

Шаг 4 — Многоразово используемые элементы

Затем снова удалите эту часть во всех трех файлах PHP и замените ее следующим кодом:

Шаг — 5 Подключение к базе данных

Теперь, когда вы включили файлы разделов заголовка и подвала, пора создать новый включаемый файл. Назовите его constants.php и скопируйте в него следующий код:

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

Шаг — 6 Конфигурация файла register.php

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

Шаг — 7 Конфигурация файла login.php

Шаг — 8 Конфигурация файла intropage.php

Шаг — 9 Конфигурация файла logout.php

Скопируйте данный код в файл logout.php :

Заключение

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

Надеюсь, вам понравилась эта статья. Увидимся в следующий раз!

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

>
>
else <
$message = «That username already exists! Please try another one!»;
>
>
else <
$message = «All fields are required!»;
>
>
?>

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

md5 шифрование так и не нашел в коде 🙁

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

Объясните новичку, как работает система донатов на сайте, как её создать и подключить к базе данных, и как менять цену на игровую валюту, буду очень благодарен!

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

где есть подключение к бд или работа с бд надо добавить букву i
например
mysql_query устаревшая
новая mysqli_query
читаем тут https://www.php.net/manual/ru/
валидатор https://phpcodechecker.com

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

Объясните пожалуйста шаг 4. Зачем заменять на header.php? А в footer.php только копирайт.

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

пожауйста скиньте исходник. не могу разобраться с кодом!

Как сделать авторизацию на сайте html с помощью php. Смотреть фото Как сделать авторизацию на сайте html с помощью php. Смотреть картинку Как сделать авторизацию на сайте html с помощью php. Картинка про Как сделать авторизацию на сайте html с помощью php. Фото Как сделать авторизацию на сайте html с помощью php

И только после этого всё заработало, как автор писал в статье:

Источник

Безопасный метод авторизации на PHP

Примечание: мини-статья написана для новичков

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

1. Модель (клиент)
Регистрация
— логин (a-z0-9)
— пароль
Вход
— логин
— пароль
Cookie
— уникальный идентификатор юзера
— хэш

Модель (сервер)
MySQL
Таблица users
user_id (int(11))
user_login (Varchar(30))
user_password (varchar(32))
user_hash (varchar(32))
user_ip (int(10)) по умолчанию 0

При регистрации в базу данных записываеться логин пользователя и пароль(в двойном md5 шифровании)

При авторизация, сравниваеться логин и пароль, если они верны, то генерируеться случайная строка, которая хешируеться и добавляеться в БД в строку user_hash. Также записываеться IP адрес пользователя(но это у нас будет опциональным, так как кто-то сидит через Proxy, а у кого-то IP динамический… тут уже пользователь сам будет выбирать безопасность или удобство). В куки пользователя мы записываем его уникальный индетификатор и сгенерированный hash.

Почему надо хранить в куках хеш случайно сгенерированной строки, а не хеш пароля?
1. Из-за невнимательности программиста, во всей системе могут быть дырки, воспользовавшийсь этими дырками, злоумышленик может вытащить хеш пароля из БД и подставить его в свои куки, тем самым получить доступ к закрытым данным. В нашем же случае, двойной хеш пароля не чем не сможет помочь хакеру, так как расшифровать он его не сможет(теоретически это возможно, но на это он потратит не один месяц, а может быть и год) а воспользоваться этим хешем ему негде, ведь у нас при авторизации свой уникальный хеш прикрепленный к IP пользователя.

2. Если злоумышленик вытащит трояном у пользователя уникальный хеш, воспользовать им он также не сможет(разве если только, пользователь решил принебречь своей безопастностью и выключил привязку к IP при авторизации).

2. Практика

— Структура таблицы `users`

CREATE TABLE `users` (

`user_id` int(11) unsigned NOT NULL auto_increment,

`user_login` varchar(30) NOT NULL,

`user_password` varchar(32) NOT NULL,

`user_hash` varchar(32) NOT NULL,

`user_ip` int(10) unsigned NOT NULL default ‘0’,

PRIMARY KEY (`user_id`)

) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

register.php

// Страница регситрации нового пользователя

$err [] = «Логин может состоять только из букв английского алфавита и цифр» ;

$err [] = «Логин должен быть не меньше 3-х символов и не больше 30» ;

# проверяем, не сущестует ли пользователя с таким именем

$err [] = «Пользователь с таким логином уже существует в базе данных» ;

# Если нет ошибок, то добавляем в БД нового пользователя

# Убераем лишние пробелы и делаем двойное шифрование

header ( «Location: login.php» ); exit();

print «При регистрации произошли следующие ошибки:
» ;

login.php

// Страница авторизации

# Функция для генерации случайной строки

$chars = «abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789» ;

# Вытаскиваем из БД запись, у которой логин равняеться введенному

# Генерируем случайное число и шифруем его

$hash = md5 ( generateCode ( 10 ));

# Если пользователя выбрал привязку к IP

# Переводим IP в строку

# Записываем в БД новый хеш авторизации и IP

# Переадресовываем браузер на страницу проверки нашего скрипта

header ( «Location: check.php» ); exit();

print «Вы ввели неправильный логин/пароль» ;

check.php

// Скрипт проверки

print «Хм, что-то не получилось» ;

print «Включите куки» ;

Для защиты формы логина от перебора, можно использовать captcha.ru target=»_blank»>капчу.

Хочу отметить, что здесь я рассматривал авторизацию основоную на cookies, не стоит в комментариях кричать, что сессии лучше/удобнее и т.д. Спасибо.

Источник

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

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