создание авторизации на сайте на php mysql

Безопасный метод авторизации на 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 в связке с MySQL

Все кто разрабатывает web сайты, рано или поздно сталкивается с такой задачей как авторизация и аутентификация пользователей, реализованная именно с помощью языка программирования, а не с помощью стандарта протокола http. Сегодня мы рассмотрим пример создания простой авторизации с использованием языка программирования PHP, а данные о пользователях будем хранить в базе MySQL.

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

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

Создание объектов в базе данных

Переходим к практике. Для начала создадим таблицу хранения данных о пользователях в базе MySQL. Я предлагаю использовать простую структуру таблицы (Вы ее, конечно, можете дополнить чем-нибудь, у меня база называется test, а таблица users):

И давайте сразу же добавим одну запись в эту таблицу:

Итого у нас получилось:

Мы пароль, конечно же, будем хранить в хешированном виде, так как хранить пароль в открытом виде, мягко сказать, не безопасно. У нас Выше хеш пароля 123, поэтому, когда будем вводить пароль в форму, мы будем забивать именно 123, а не 202cb962ac59075b964b07152d234b70.

Создание формы регистрации

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

Кстати, при таком способе лучше всего для логина использовать латинские буквы (т.е. английские), если хотите писать логин на русском, то придется немного корректировать код. Файл можете назвать как угодно (для теста я использовал reg.html).

Примечание! Для тестирования я использую всего один файл, я его назвал mylogin.html (код файла ниже). Вы можете использовать в своих файлах и называть их как угодно, я здесь описываю сам процесс авторизации, поэтому применить его можно везде. Кстати, во всех файлах придется использовать функцию session_start(); для того чтобы Вы могли проверять авторизован пользователь или нет. И еще один момент, конечно же, пропишите свои настройки подключения к базе данных.

Создание формы авторизации

Теперь перейдем непосредственно к самой авторизации. Создайте файл с названием mylogin.html со следующим содержанием:

Примечание! Если вдруг у Вас отказывает работать парсер php, т.е. на экран Вам выводится сам код php, то у Вас просто на всего не включена обработка php в файлах html. Настройки делаются в файле конфигурации web сервера httpd.conf (если apache):

В IIS в окне «Добавление сопоставления модуля» (Add Module Mapping) добавьте к *.php еще и *.html через запятую. Это если Вы делаете у себя дома на своем web сервере, а если Вы все это делаете у хостера, то Вам придется писать им и просить внести необходимые изменения, у некоторых хостеров они уже сделаны.

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

Источник

Создание системы регистрации и авторизации на PHP

В этой статье мы создадим систему регистрации и авторизации. Что нам понадобиться для написания такой системы:

1. Создание базы данных

Создаем базу данных в интерфейсе “phpAdmin“. Базу данных называете как вам угодно, в “Сравнение” выбираем “utf8_general_ci”:

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

Таблицу создавать не надо, т.к. таблица будет создаваться при регистрации пользователя.

2. Соединение с базой данных

На локальном сервере XAMPP в папке “htdocs” создаем папку нашего будущего проекта. В этой папке создаем первый php файл “db.php”. Он нужен для соединения с базой данных.

Так как мы будем пользоваться библиотекой RedBeanPHP, тогда надо скачать библиотеку и подключить к проекту. Мы создадим в папке проекта папку “libs” и туда закинем библиотеку. Листинг файла db.php:

Имя пользователя для соединения c базой данных устанавливается по умолчанию (XAMPP), конечно если в phpMyAdmin вы их не меняли.

3. Создание шапки и подвала проекта

Создадим два файла и назовём их “header.php” и “footer.php”. Мы их будем подключать к нашим будущим формам. В статье “PHP. Динамическое создание страниц” можно изучить для чего это необходимо. Листинг файла header.php:

Это обычная шапка проекта. Для подключения стилей создайте в проекте папку “css” и в ней создайте файл style.css, а также скачайте файл фреймворка Bootstrap и закиньте его в эту папку.

Листинг файла style.css:

4. Создание форм

С помощью HTML, CSS и Bootstrap создадим необходимые формы приложения. В папке проекта создаем форму регистрации. Файл назовём “signup.php”. Листинг файла:

Итоговый дизайн формы регистрации:

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

В папке проекта создаем форму авторизации. Файл назовём “login.php”. Листинг файла:

Итоговый дизайн формы авторизации:

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

Формы будут обрабатываться с помощью метода POST. Обработка форм будет в файлах с формами.

5. Обработка формы регистрации

В файле “signup.php” после подключения файла с базой данных пишем код описанный ниже. Чтобы понять код читайте комментарии к нему. Листинг:

Как видите наша регистрация безопасна на 100% т.к. есть множество различных проверок и хеширование пароля. Зарегистрировать двух пользователей с одинаковым логином и Email невозможно. Вы можете добавить и другие проверки при регистрации.

6. Обработка формы авторизации

В файле “login.php” после подключения файла с базой данных пишем код описанный ниже. Чтобы понять код читайте комментарии к нему. Листинг:

Про работу $_SESSION можно почитать в нашей статье “Cookie и отслеживание сеанса“.

7. Создание главного файла приложения

Все формы и обработчики форм мы написали, а теперь создадим главный файл где будет отображаться приветствие пользователя, когда он будет авторизован. Файл назовём “index.php”. Листинг:

Дизайн главной страницы если пользователь не авторизован:

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

Дизайн главной страницы если пользователь авторизован:

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

Теперь создадим последний файл в нашем проекте и назовём его “logout.php”. Он необходим для удаления сессии пользователя, когда он авторизован. Листинг файла:

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

Структура проекта в виде дерева:

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

На этом мы заканчиваем создание системы регистрации и авторизации на PHP. В комментариях жду Ваших предложений по доработке этого приложения. Удачи в разработке!

Источник

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

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

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

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

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

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

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

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

Шаг 1 – MySQL

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

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

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

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

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

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

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

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

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

Шаг 3 — CSS

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Безопасный метод авторизации на 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 не будет опубликован. Обязательные поля помечены *