CMS на SQL. Как сделать веб-интерфейс для базы данных SQL Server в виде личных кабинетов на сайте. Веб приложение sql

Регистрация Войти Войти через VK Войти через FB Войти через Google Войти через Яндекс

Поиск по сайту

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

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

Клиент

Регистрация:

  • логин (a-z0-9)
  • пароль

Вход:

  • логин
  • пароль

Cookie:

  • уникальный идентификатор юзера
  • хэш
Сервер MySQL

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

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

Почему надо хранить в куках хеш случайно сгенерированной строки, а не хеш пароля?

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

Реализация

Структура таблицы `users` в базе данных ‘testtable’
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 default '',      `user_ip` int(10) unsigned NOT NULL default '0',      PRIMARY KEY (`user_id`)  ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

register.php

<?  // Страница регистрации нового пользователя    // Соединямся с БД  $link=mysqli_connect("localhost", "mysql_user", "mysql_password", "testtable");    if(isset($_POST['submit']))  {      $err = [];        // проверям логин      if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['login']))      {          $err[] = "Логин может состоять только из букв английского алфавита и цифр";      }        if(strlen($_POST['login']) < 3 or strlen($_POST['login']) > 30)      {          $err[] = "Логин должен быть не меньше 3-х символов и не больше 30";      }        // проверяем, не сущестует ли пользователя с таким именем      $query = mysqli_query($link, "SELECT user_id FROM users WHERE user_login='".mysqli_real_escape_string($link, $_POST['login'])."'");      if(mysqli_num_rows($query) > 0)      {          $err[] = "Пользователь с таким логином уже существует в базе данных";      }        // Если нет ошибок, то добавляем в БД нового пользователя      if(count($err) == 0)      {            $login = $_POST['login'];            // Убераем лишние пробелы и делаем двойное хеширование          $password = md5(md5(trim($_POST['password'])));            mysqli_query($link,"INSERT INTO users SET user_login='".$login."', user_password='".$password."'");          header("Location: login.php"); exit();      }      else      {          print "При регистрации произошли следующие ошибки: ";          foreach($err AS $error)          {              print $error." ";          }      }  }        

login.php

<?  // Страница авторизации    // Функция для генерации случайной строки  function generateCode($length=6) {      $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";      $code = "";      $clen = strlen($chars) - 1;      while (strlen($code) < $length) {              $code .= $chars[mt_rand(0,$clen)];      }      return $code;  }    // Соединямся с БД  $link=mysqli_connect("localhost", "mysql_user", "mysql_password", "testtable");    if(isset($_POST['submit']))  {      // Вытаскиваем из БД запись, у которой логин равняеться введенному      $query = mysqli_query($link,"SELECT user_id, user_password FROM users WHERE user_login='".mysqli_real_escape_string($link,$_POST['login'])."' LIMIT 1");      $data = mysqli_fetch_assoc($query);        // Сравниваем пароли      if($data['user_password'] === md5(md5($_POST['password'])))      {          // Генерируем случайное число и шифруем его          $hash = md5(generateCode(10));            if(!empty($_POST['not_attach_ip']))          {              // Если пользователя выбрал привязку к IP              // Переводим IP в строку              $insip = ", user_ip=INET_ATON('".$_SERVER['REMOTE_ADDR']."')";          }            // Записываем в БД новый хеш авторизации и IP          mysqli_query($link, "UPDATE users SET user_hash='".$hash."' ".$insip." WHERE user_id='".$data['user_id']."'");            // Ставим куки          setcookie("id", $data['user_id'], time()+60*60*24*30, "/");          setcookie("hash", $hash, time()+60*60*24*30, "/", null, null, true); // httponly !!!            // Переадресовываем браузер на страницу проверки нашего скрипта          header("Location: check.php"); exit();      }      else      {          print "Вы ввели неправильный логин/пароль";      }  }      </code>

check.php

<?  // Скрипт проверки    // Соединямся с БД  $link=mysqli_connect("localhost", "mysql_user", "mysql_password", "testtable");    if (isset($_COOKIE['id']) and isset($_COOKIE['hash']))  {      $query = mysqli_query($link, "SELECT *,INET_NTOA(user_ip) AS user_ip FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1");      $userdata = mysqli_fetch_assoc($query);        if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id'])   or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR'])  and ($userdata['user_ip'] !== "0")))      {          setcookie("id", "", time() - 3600*24*30*12, "/");          setcookie("hash", "", time() - 3600*24*30*12, "/", null, null, true); // httponly !!!          print "Хм, что-то не получилось";      }      else      {          print "Привет, ".$userdata['user_login'].". Всё работает!";      }  }  else  {      print "Включите куки";  }   </code>

logout.php

<?  // Страница разавторизации    // Удаляем куки  setcookie("id", "", time() - 3600*24*30*12, "/");  setcookie("hash", "", time() - 3600*24*30*12, "/",null,null,true); // httponly !!!    // Переадресовываем браузер на страницу проверки нашего скрипта  header("Location: /"); exit;        </code>

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

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

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

Другие примеры авторизации на PHP:

© Copyright 2008-2023 by KDG | Контакты | Реклама | Тарифы–>

Метки: MySQL / PHP / Как сделать / Обучение

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

Перед тем как читать эту статью, рекомендую прочитать наш учебник про основы программирования на PHP (Ссылка на учебник), также у нас есть статья которая показывает как сделать регистрацию через Email (Ссылка на учебник).

Настройка базы данных:

Для начала нам надо создать и настроить базу данных, для этого заходим в PhpMyAdmin.

Создание базы данных:

Создаём базу данных, называем её user-login и выбираем кодировку utf8_general_ci.

image

Нажимаем кнопку, создать БД

image

Настройка БД

Создание и настройка таблицы в БД:

Называем таблицу users, и настраиваем её, я не буду объяснять что каждая настройка значит, так как эта статья не о том как работать с БД, а просто покажу на скриншоте, после нажимаем сохранить.

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

Подключение БД к PHP:

Для этого создаём файлы connect.php, index.php и checkin.php. Сначала мы в connect.php подключаемся к самой БД, для этого пишем код ниже.

HTML я не стал рассказывать, так как, там всё понятно, да и вообще программист должен разберется в коде.

Создаём авторизацию на PHP:

Код будет очень сильно похож на файл регистрацию, но есть ряд не больших отличий.

Информацию о функции password_verify найдёте здесь, как видите код очень простой, но это ещё не всё, дальше вы сами напишите.

Что ещё надо сделать:

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

Вывод:

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

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

Скачать файлы

Подписываетесь на соц-сети:

Также рекомендую:

Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Перейти на сайт->

Бесплатный Курс “Практика HTML5 и CSS3”

Освойте бесплатно пошаговый видеокурс

по основам адаптивной верстки

на HTML5 и CSS3 с полного нуля.

Начать->

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

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

Верстайте на заказ и получайте деньги.

Получить в подарок->

Бесплатный тренинг “PHP для Создания Сайтов: Введение”

Что нужно знать для создания PHP-сайтов?

Ответ здесь. Только самое важное и полезное для начинающего веб-разработчика.

Узнайте, как создавать качественные сайты на PHP всего за 2 часа и 27 минут!

Записаться бесплатно->

–>

Бесплатный курс “Сайт-Визитка За 15 уроков”

Создайте свой сайт за 3 часа и 30 минут.

После просмотра данного видеокурса у Вас на компьютере будет готовый к использованию сайт, который Вы сделали сами.

Вам останется лишь наполнить его нужной информацией и изменить дизайн (по желанию).

Получить в подарок->

–>

Бесплатный курс “Основы HTML и CSS”

Изучите основы HTML и CSS менее чем за 4 часа.

После просмотра данного видеокурса Вы перестанете с ужасом смотреть на HTML-код и будете понимать, как он работает.

Вы сможете создать свои первые HTML-страницы и придать им нужный вид с помощью CSS.

Получить в подарок->

  • Главная»
  • Уроки

В этом разделе перечислены все уроки без разделения по рубрикам.

Выбирайте тот урок, который интересует Вас больше всего на данный момент. К каждому уроку Вы можете оставить свой комментарий, а также проголосовать.

1 2 3 4 368

  • Как выбрать хороший хостинг для своего сайта?

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

    Сложность: Создан: 15 Апреля 2020 Просмотров: 9568

  • Как разместить свой сайт на хостинге? Правильно выбранный хороший хостинг – это будущее Ваших сайтов

    Проект готов, Все проверено на локальном сервере OpenServer и можно переносить сайт на хостинг. Вот только какую компанию выбрать? Предлагаю рассмотреть хостинг fornex.com. Отличное место для твоего проекта с перспективами бурного роста.

    Сложность: Создан: 23 Ноября 2018 Просмотров: 17165

  • Разработка веб-сайтов с помощью онлайн платформы Wrike

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

    Сложность: Создан: 27 Июня 2018 Просмотров: 17123

  • Почему WordPress лучше чем Joomla ?

    Этот урок скорее всего будет психологическим, т.к. многие люди работают с WordPress и одновременно с Joomla, но не могут решится каким CMS пользоваться.

    Сложность: Создан: 26 Августа 2017 Просмотров: 27994

  • Про шаблоны WordPress

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

    Сложность: Создан: 3 Августа 2017 Просмотров: 25875

  • Анимация набора текста на jQuery

    Сегодня мы бы хотели вам рассказать о библиотеке TypeIt — бесплатном jQuery плагине. С её помощью можно имитировать набор текста. Если всё настроить правильно, то можно добиться очень реалистичного эффекта.

    Сложность: Создан: 26 Июля 2017 Просмотров: 38770

  • Самые первые настройки после установки движка WordPress

    Сегодня мы вам расскажем какие первые настройки нужно сделать после установки движка WordPress. Этот урок будет очень полезен для новичков.

    Сложность: Создан: 24 Июля 2017 Просмотров: 24683

1 2 3 4 368

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

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

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

Содержание

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

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

        CREATE TABLE test.users(       user_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,       user_login VARCHAR(30) NOT NULL,       user_password VARCHAR(32) NOT NULL,       PRIMARY KEY (user_id)     )     ENGINE = MYISAM     CHARACTER SET utf8     COLLATE utf8_general_ci;    

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

        insert into test.users (user_login, user_password)                  values ('mylogin','202cb962ac59075b964b07152d234b70')    

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

  • Логин – mylogin;
  • Пароль — 202cb962ac59075b964b07152d234b70;

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

image

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

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

                   mysql_connect ("localhost", "root","");//пишите свои настройки          mysql_select_db("test") or die (mysql_error());//и свою бд          mysql_query('SET character_set_database = utf8');           mysql_query ("SET NAMES 'utf8'");          error_reporting(E_ALL);           ini_set("display_errors", 1);          if(isset($_POST['submit'])) {          //проверяем, нет ли у нас пользователя с таким логином          $query = mysql_query("SELECT COUNT(user_id)                   FROM users WHERE                   user_login='".mysql_real_escape_string($_POST['login'])."'");          if(mysql_result($query, 0) > 0)  {                          $error = "Пользователь с таким логином уже есть";             }                          // Если нет, то добавляем нового пользователя            if(!isset($error) )   {                  $login = mysql_real_escape_string(trim(htmlspecialchars($_POST['login'])));                  // Убираем пробелы и хешируем пароль                  $password = md5(trim($_POST['password']));                  mysql_query("INSERT INTO users                   SET user_login='".$login."', user_password='".$password."'");                  echo 'Вы успешно зарегистрировались с логином - '.$login;                  exit();          }  else   {          // если есть такой логин, то говорим об этом                   echo $error;                  }          }          //по умолчанию данные будут отправляться на этот же файл          print <<< html                html;          </pre> Кстати, при таком способе лучше всего для логина использовать латинские буквы (т.е. английские), если хотите писать логин на русском, то придется немного корректировать код. Файл можете назвать как угодно (для теста я использовал reg.html). Примечание! Для тестирования я использую всего один файл, я его назвал mylogin.html (код файла ниже). Вы можете использовать в своих файлах и называть их как угодно, я здесь описываю сам процесс авторизации, поэтому применить его можно везде. Кстати, во всех файлах придется использовать функцию session_start(); для того чтобы Вы могли проверять авторизован пользователь или нет. И еще один момент, конечно же, пропишите свои настройки подключения к базе данных.  Создание формы авторизации Теперь перейдем непосредственно к самой авторизации. Создайте файл с названием mylogin.html со следующим содержанием:                    mysql_connect ("localhost", "root","");//пишите свои настройки          mysql_select_db("test") or die (mysql_error());//и свою бд          mysql_query('SET character_set_database = utf8');           mysql_query ("SET NAMES 'utf8'");          error_reporting(E_ALL);           ini_set("display_errors", 1);          session_start();//не забываем во всех файлах писать session_start     if (isset($_POST['login']) && isset($_POST['password'])){      //немного профильтруем логин          $login = mysql_real_escape_string(htmlspecialchars($_POST['login']));      //хешируем пароль т.к. в базе именно хеш          $password = md5(trim($_POST['password']));       // проверяем введенные данные      $query = "SELECT user_id, user_login              FROM users              WHERE user_login= '$login' AND user_password = '$password'              LIMIT 1";      $sql = mysql_query($query) or die(mysql_error());      // если такой пользователь есть      if (mysql_num_rows($sql) == 1) {          $row = mysql_fetch_assoc($sql);                  //ставим метку в сессии                   $_SESSION['user_id'] = $row['user_id'];                  $_SESSION['user_login'] = $row['user_login'];                  //ставим куки и время их хранения 10 дней                  setcookie("CookieMy", $row['user_login'], time()+60*60*24*10);                       }      else {          //если пользователя нет, то пусть пробует еще                  header("Location: mylogin.html");       }     }     //проверяем сессию, если она есть, то значит уже авторизовались     if (isset($_SESSION['user_id'])){          echo htmlspecialchars($_SESSION['user_login'])."  "."Вы авторизованы            Т.е. мы проверили сессию и можем открыть доступ к определенным данным";     } else {          $login = '';          //проверяем куку, может он уже заходил сюда          if (isset($_COOKIE['CookieMy'])){                  $login = htmlspecialchars($_COOKIE['CookieMy']);          }          //простая формочка          print <<<      html           html;       }          </pre> Примечание! Если вдруг у Вас отказывает работать парсер php, т.е. на экран Вам выводится сам код php, то у Вас просто на всего не включена обработка php в файлах html. Настройки делаются в файле конфигурации web сервера httpd.conf (если apache):         AddType application/x-httpd-php .php .html    

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

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

Оцените статью
Рейтинг автора
4,8
Материал подготовил
Егор Новиков
Наш эксперт
Написано статей
127
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий