Скрипт авторизации на php mysql

Скрипт авторизации на php mysql

Пишем свою авторизацию на PHP и MySQL

Ну что же, сегодня я вам расскажу о безопасной авторизации на PHP и Cookie. Ну о том что она абсолютна безопасна я не говорю, ибо взломать можно все, но для маленького сайта она вполне подходит. Так же я предвижу комментарии о том что сессии безопаснее. Не спорю куки уступают сессиям в безопасности но для реализации простенькой авторизации вполне подходят. Подробности ниже.

И так, в базе у нас будет 1 база из 4 полей: users_id, users_login, users_password и users_hash. SQL запрос:

    Сам скрипт авторизации будет тоже на 4 файлах. А именно:
  • conf.php — Файл конфигурации, в котором так же содержится подключение к бд;
  • register.php — Регистрация нового пользователя;
  • login.php — Авторизация пользователя;
  • check.php — Скрипт проверки авторизации;
  • Давайте разберем каждый файл.

    conf.php

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

    # настройки
    define ( ‘DB_HOST’ , ‘localhost’ ) ;
    define ( ‘DB_LOGIN’ , ‘example_user’ ) ;
    define ( ‘DB_PASSWORD’ , ‘example_password’ ) ;
    define ( ‘DB_NAME’ , ‘example_base’ ) ;
    mysql_connect ( DB_HOST , DB_LOGIN , DB_PASSWORD ) or die ( "MySQL Error: " . mysql_error ( ) ) ;
    mysql_query ( "set names utf8" ) or die ( "
    Invalid query: " . mysql_error ( ) ) ;
    mysql_select_db ( DB_NAME ) or die ( "
    Invalid query: " . mysql_error ( ) ) ;

    # массив ошибок
    $error [ 0 ] = ‘Я вас не знаю’ ;
    $error [ 1 ] = ‘Включи куки’ ;
    $error [ 2 ] = ‘Тебе сюда нельзя’ ;
    ?>

    register.php

    Файл регистрации, тут содержится простейшая форма и ее обработчик. Исходный код прокомментирован, но общий процесс я коротко опишу. Вначале проверяем наш логин, он может содержать только английские буквы и цифры. Далее мы проверяем длину логина, от 3 до 30 символов. Проверяем свободен ли логин. При успешных проверках добавляем нового пользователя в базу. Из введенного пароля мы вырезаем пробелы на случай если пользователь хранит свои пароли в каком ни будь текстовом файле (в windows текстовые редакторы любят «хватать» пробелы в начале или конце выделяемого текста). Шифруем пароль в двойном MD5 и добавляем в базу данные о новом пользователе. Перебрасываем пользователя на login.php.

    # Подключаем конфиг
    include ‘conf.php’ ;

    if ( isset ( $_POST [ ‘submit’ ] ) )
    <

    # проверям логин
    if ( ! preg_match ( "/^[a-zA-Z0-9]+$/" , $_POST [ ‘login’ ] ) )
    <
    $err [ ] = "Логин может состоять только из букв английского алфавита и цифр" ;
    >

    if ( strlen ( $_POST [ ‘login’ ] ) 3 or strlen ( $_POST [ ‘login’ ] ) > 30 )
    <
    $err [ ] = "Логин должен быть не меньше 3-х символов и не больше 30" ;
    >

    # проверяем, не сущестует ли пользователя с таким именем
    $query = mysql_query ( "SELECT COUNT(users_id) FROM users WHERE users_login=’" . mysql_real_escape_string ( $_POST [ ‘login’ ] ) . "’" ) or die ( "
    Invalid query: " . mysql_error ( ) ) ;
    if ( mysql_result ( $query , 0 ) > 0 )
    <
    $err [ ] = "Пользователь с таким логином уже существует в базе данных" ;
    >

    Читайте также:  Как скрыть рут права на андроид

    # Если нет ошибок, то добавляем в БД нового пользователя
    if ( count ( $err ) == 0 )
    <

    $login = $_POST [ ‘login’ ] ;

    # Убераем лишние пробелы и делаем двойное шифрование
    $password = md5 ( md5 ( trim ( $_POST [ ‘password’ ] ) ) ) ;

    mysql_query ( "INSERT INTO users SET users_login=’" . $login . "’, users_password=’" . $password . "’" ) ;
    header ( "Location: login.php" ) ; exit ( ) ;
    >
    >
    ?>

    if ( isset ( $err ) ) <
    print "При регистрации произошли следующие ошибки:
    " ;
    foreach ( $err AS $error )
    <
    print $error . "
    " ;
    >
    >
    ?>

    login.php

    Опять кратко расскажу о действиях совершаемых в данном скрипте. В самом начале у нас висит функция для генерации случайной строки, она служит для хеша пользователя (чуть позже более подробно). Далее мы проверяем наличие куков с ошибками (они ставятся в check.php). Подключаем файл конфигурации и проверяем пользователя. Вытаскиваем из бд логин и пароль, сравниваем с введенными и генерируем хеш. Записываем в бд новый хеш пользователя и ставим куки. В куках находится id и хеш пользователя. Пересылаем пользователя на check.php.

    # Функция для генерации случайной строки
    function generateCode ( $length = 6 ) <
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789" ;
    $code = "" ;
    $clen = strlen ( $chars ) — 1 ;
    while ( strlen ( $code ) $length ) <
    $code .= $chars [ mt_rand ( 0 , $clen ) ] ;
    >
    return $code ;
    >

    # Если есть куки с ошибкой то выводим их в переменную и удаляем куки
    if ( isset ( $_COOKIE [ ‘errors’ ] ) ) <
    $errors = $_COOKIE [ ‘errors’ ] ;
    setcookie ( ‘errors’ , » , time ( ) — 60 * 24 * 30 * 12 , ‘/’ ) ;
    >

    # Подключаем конфиг
    include ‘conf.php’ ;

    if ( isset ( $_POST [ ‘submit’ ] ) )
    <

    # Вытаскиваем из БД запись, у которой логин равняеться введенному
    $data = mysql_fetch_assoc ( mysql_query ( "SELECT users_id, users_password FROM `users` WHERE `users_login`=’" . mysql_real_escape_string ( $_POST [ ‘login’ ] ) . "’ LIMIT 1" ) ) ;

    # Соавниваем пароли
    if ( $data [ ‘users_password’ ] === md5 ( md5 ( $_POST [ ‘password’ ] ) ) )
    <
    # Генерируем случайное число и шифруем его
    $hash = md5 ( generateCode ( 10 ) ) ;

    # Записываем в БД новый хеш авторизации и IP
    mysql_query ( "UPDATE users SET users_hash=’" . $hash . "’ WHERE users_id=’" . $data [ ‘users_id’ ] . "’" ) or die ( "MySQL Error: " . mysql_error ( ) ) ;

    # Ставим куки
    setcookie ( "id" , $data [ ‘users_id’ ] , time ( ) + 60 * 60 * 24 * 30 ) ;
    setcookie ( "hash" , $hash , time ( ) + 60 * 60 * 24 * 30 ) ;

    # Переадресовываем браузер на страницу проверки нашего скрипта
    header ( "Location: check.php" ) ; exit ( ) ;
    >
    else
    <
    print "Вы ввели неправильный логин/пароль
    " ;
    >
    >
    ?>

    # Проверяем наличие в куках номера ошибки
    if ( isset ( $errors ) ) < print ‘

    ‘ . $error [ $errors ] . ‘

    check.php

    И последний файл, который содержит проверку авторизации пользователя. В начале подключаем конфиг и если существуют куки начинаем проверку, если их нет, то ставим куки с номером ошибки и отсылаем на login.php. И так проверка. Вытаскиваем из бд id и хеш. Если они не проходят проверку на соответствие с теми куками которые стоят у посетителя, то удаляем существующие куки посетителя и ставим куки с номером ошибки, пересылаем на login.php. Если же все нормально то пользователь увидит страницу.

    Читайте также:  Производная x lnx равна

    # подключаем конфиг
    include ‘conf.php’ ;

    # проверка авторизации
    if ( isset ( $_COOKIE [ ‘id’ ] ) and isset ( $_COOKIE [ ‘hash’ ] ) )
    <
    $userdata = mysql_fetch_assoc ( mysql_query ( "SELECT * FROM users WHERE users_id = ‘" . intval ( $_COOKIE [ ‘id’ ] ) . "’ LIMIT 1" ) ) ;

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

    Форма регистрации и авторизации имеет хорошую защиту от внедрения в неё каких-либо кодов и выводит автоматом системные сообщения пользователю.

    Скрипт был успешно протестирован на версии PHP 5.3.3 и PHP 5.6.3 .

    Что умеет и имеет скрипт

    • Регистрировать новых пользователей;
    • Авторизовывать пользователей и записывать куки на определённый срок (нет необходимости каждый раз авторизовываться);
    • Показывать и скрывать определённую информацию для авторизованных и не авторизованных соответственно;
    • Имеет АДМИН ПАНЕЛЬ , где можно редактировать все данные и удалять пользователей.

    Там же и DEMO Админ Панели

    Установка скрипта регистрации и авторизации на сайте.

    После того, как вы сделали хоть одну регистрацию, можете перейти в АДМИНКУ.
    Вход в АДМИН-ПАНЕЛЬ :

    Не забудьте запоролить эту папку для безопасности и можно так же переименовать её.
    При открытие Админ Панели нажмите кнопку ПОИСК и вам отобразятся все зарегистрированные пользователи, где при нажатие на определённый номер ID , вам откроются данные пользователя для редактирования.

    Можно так же быстро найти пользователя по его E-mail, для этого достаточно ввести в поле для ПОИСКа известную электронную почту и нажать на кнопку.
    Кнопкой ДОБАВИТЬ не советую пользоваться, так как пользователь добавляется в систему без пароля. И не имею понятия зачем её вообще сделали.

    На этом всё, что не получается или не понятно, — задавайте вопросы.

    Попутно можете попробовать ГОТОВЫЙ САЙТ для продажи информации ( товаров ).

    Скачать скрипт регистрации и авторизации пользователей

    Здравствуйте! Сейчас мы попробуем реализовать самую простую регистрацию на сайте с помощью PHP + MySQL. Для этого на вашем компьютере должен быть установлен Apache. Принцип работы нашего скрипта изображен ниже.

    1. Начнем с создания таблички users в базе. Она будет содержать данные пользователя (логин и пароль). Зайдем в phpmyadmin (если вы создаете базу на своем ПК http://localhost/phpmyadmin/). Создаем таблицу users, в ней будет 3 поля.

    Читайте также:  Почему выделенная область пуста в фотошопе

    Я создаю ее в базе mysql, вы можете создавать в другой базе. Далее устанавливаем значения, как на рисунке:

    Нажимаем "сохранить". Итак, таблица у нас есть.

    2. Необходимо соединение с этой таблицей. Давайте создадим файл bd.php. Его содержание:

    В моем случае это выглядит так:

    Сохраняем bd.php.
    Отлично! У нас есть таблица в базе, соединение к ней. Теперь можно приступать к созданию странички, на которой пользователи будут оставлять свои данные.

    3. Создаем файл reg.php с содержанием (все комментарии внутри):

    4. Создаем файл, который будет заносить данные в базу и сохранять пользователя. save_user.php(комментарии внутри):

    5. Теперь наши пользователи могут регистрироваться! Далее необходимо сделать "дверь" для входа на сайт уже зарегистрированным пользователям. index.php (комментарии внутри) :

    В файле index.php мы выведем ссылочку, которая будет открыта только для зарегистрированных пользователей. В этом и заключается вся суть скрипта — ограничить доступ к каким-либо данным.

    6. Остался файл с проверкой введенного логина и пароля. testreg.php (комментарии внутри):

    Ну вот и все! Может урок и скучный, но очень полезный. Здесь показана только идея регистрации, далее Вы можете усовершенствовать ее: добавить защиту, оформление, поля с данными, загрузку аватаров, выход из аккаунта (для этого просто уничтожить переменные из сессии функцией unset) и так далее. Удачи!

    Все проверил, работает исправно!

    Автор: Стороженко Евгений (отредактировал и опубликовал Максим Шкурупий)

    Данный урок подготовлен для вас командой сайта ruseller.com
    Источник урока: www.ruseller.com
    Автор: Максим Шкурупий
    Урок создан: 24 Июля 2009
    Просмотров: 10131604
    Правила перепечатки

    5 последних уроков рубрики "PHP"

    Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.

    Контекстное экранирование с помощью zend-escaper

    Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

    Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

    Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

    Подборка PHP песочниц

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

    Ссылка на основную публикацию
    Системная плата ecs mcp61m m3
    Средняя цена по России, руб: 3 877 Общие характеристики Производитель Фирма, которая произвела данную материнскую плату. ECS Форм-фактор Форм-фактор –...
    Самые популярные модели в инстаграм
    К ендалл Дженнер в этом году не было среди ангелов на Victoria’s Secret Fashion Show и не зря! Мало того,...
    Самодельная подставка для ноутбука с охлаждением
    Всем добрый вечер! Сегодня я снова пишу в Блог а не в Бортовой Журнал машины, лишь потому, что с машиной...
    Системное администрирование windows 10
    Наверняка вы уже слышали, что сегодня официально выходит Windows 10 Creators Update. В этой статье мы решили быть на шаг...
    Adblock detector