PHP Secure Login Script 2018 и 2017 - Учебник для полной системы входа PHP MySQL с решением для PDO - PHP Secure Login и блог пакета регистрации

  1. содержание

содержание

ООП Учебное пособие по входу в PHP: Что такое система безопасного входа в PHP с регистрацией?

Что может сделать этот класс системы безопасного входа в систему PHP?

Скрипт стартовой страницы безопасного входа в PHP

Отправка форм JavaScript и AJAX

Сценарий процесса входа

Сценарий процесса регистрации

Сценарий процесса активации

Сценарий процесса выхода

Файл сценария конфигурации

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

Войти по одному пользователю за раз

Загрузите учебный класс и сценарии PHP Login System

Журнал изменений

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

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

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

Я буду использовать Bootstrap и jQuery для пользовательского интерфейса и отправки форм с использованием запросов AJAX или регулярной отправки страниц форм. Не беспокойтесь, если вы не используете AJAX везде. Учебное пособие представлено таким образом, чтобы предложить больше людей, чтобы они могли воспользоваться знаниями, которыми они здесь делятся.

Этот класс предоставляет простой способ регистрации новых пользователей. Он поддерживает безопасный процесс входа в PHP после активации с кодом подтверждения входа, отправленным на их адрес электронной почты. Он использует jQuery для отправки форм с помощью AJAX-запроса к сценариям, которые действуют как REST API, но также могут использоваться непосредственно с PHP-сценариями, которые обслуживают страницы входа в систему.

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

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

Он поддерживает PDO , поэтому вы можете использовать его для хранения записей базы данных пользователей, используя MySQL , PostgreSQL , SQLite и другие. Приведенный здесь пример объяснит, как использовать его с MySQL. Он может использовать MySQLi вместо PDO, но будет более полезным, если вы сможете использовать этот код повторно с другими типами баз данных.

Поскольку мы можем использовать PDO также с SQLite, мы можем использовать для входа в PHP без базы данных , я имею в виду реальный сервер базы данных, поскольку SQLite хранит базу данных в локальных файлах.

Этот класс также может быть расширен для реализации социальной системы входа в систему, использующей OAuth для входа в систему через Facebook , Yahoo, Google, YouTube, Gmail, Microsoft, LinkedIn, GitHub, BitBucket, Instagram, Tumblr, deviantart, WordPress, ODesk и многие другие.

Но для этого вам нужно будет использовать и другие классы для входа в систему с OAuth или даже LDAP для входа , Хорошей идеей для будущих улучшений является также поддержка СМС логин Я имею в виду использование метода для отправки кода через SMS, чтобы пользователь мог доказать, что он владеет данной учетной записью, или даже проверить MAC-адрес ограничить доступ пользователям в локальной сети. Но пока давайте будем простыми.

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

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

<? php require_once '../class/user.php'; require_once 'config.php'; $ User-> indexHead (); $ User-> indexTop (); $ User-> LoginForm (); $ User-> activationForm (); $ User-> indexMiddle (); $ User-> registerForm (); $ User-> indexFooter (); ?>

Этот класс использует шаблоны сценариев, которые вы можете найти в вкл каталог. Если вы посмотрите на файлы шаблонов, то увидите, что мы используем jQuery и Bootstrap, а также два пользовательских файла: один для CSS, а другой для JS.

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

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

В файле main.js я использую запросы jQuery и AJAX. Это важно, если мы хотим использовать метод REST API. Это очень полезно, если мы хотим отделить внешний интерфейс от внутреннего.

$ (function () {$ ('# login-form-link'). click (function (e) {$ ("# login-form"). delay (100) .fadeIn (100); $ ("# register) -form "). fadeOut (100); $ ('# register-form-link'). removeClass ('active'); $ (this) .addClass ('active'); e.preventDefault ();}); $ ('# register-form-link'). click (function (e) {$ ("# register-form"). delay (100) .fadeIn (100); $ ("# login-form"). fadeOut (100); $ ('# login-form-link'). RemoveClass ('active'); $ (this) .addClass ('active'); e.preventDefault ();});}); функция validateEmail ($ email) {var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]]2, enj)?$/; вернуть emailReg.test ($ email); }

Первые два раздела в коде JavaScript предназначены для переключения между вкладками. Далее я использую кнопки отправки в каждой форме. Поскольку мы используем jQuery и AJAX, мы не будем отправлять форму классическим способом, а скорее получим значения из входных данных с помощью jQuery и передадим значения с помощью запроса AJAX POST в скрипты PHP внутреннего интерфейса.

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

Для входа в систему скрипт получает опубликованные данные и передает их методу входа в класс. Если вход успешен, он назначит пользовательские данные переменным входа в сеанс и ничего не возвращает в качестве результата. Если есть ошибка, она напечатает ее.

Не забывайте, что мы вызываем этот скрипт через AJAX, поэтому все, что выводит скрипт, будет доставлено в результате вызова AJAX в JavaScript.

<? php require_once '../class/user.php'; require_once 'config.php'; $ email = filter_input (INPUT_POST, 'username', FILTER_SANITIZE_EMAIL); $ password = filter_input (INPUT_POST, 'password', FILTER_DEFAULT); if ($ user-> login ($ email, $ password)) {die; } else {$ user-> printMsg (); умереть; }

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

<? php require_once '../class/user.php'; require_once 'config.php'; $ email = filter_input (INPUT_POST, 'email', FILTER_SANITIZE_EMAIL); $ fname = filter_input (INPUT_POST, 'fname', FILTER_SANITIZE_STRING); $ lname = filter_input (INPUT_POST, 'lname', FILTER_SANITIZE_STRING); $ pass = filter_input (INPUT_POST, 'password', FILTER_DEFAULT); if ($ user-> registration ($ email, $ fname, $ lname, $ pass)) {print 'Письмо с подтверждением отправлено, подтвердите регистрацию вашей учетной записи!'; умереть; } else {$ user-> printMsg (); умереть; }

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

<? php require_once '../class/user.php'; require_once 'config.php'; $ email = filter_input (INPUT_POST, 'email', FILTER_SANITIZE_EMAIL); $ code = filter_input (INPUT_POST, 'code', FILTER_DEFAULT); if ($ user-> emailActivation ($ email, $ code)) {die; } else {$ user-> printMsg (); умереть; }

Для процесса выхода из системы я использую метод выхода из системы в пользовательском классе. После завершения процесса выхода из системы мы просто перенаправляем пользователя на index.php. В этом примере процесс выхода из системы не запускается через AJAX. Если мы вызываем его через AJAX, то перенаправление выполняется с помощью кода JavaScript, а не в PHP.

<? php require_once '../user.php'; require_once 'config.php'; $ User-> выход из системы (); заголовок ('location: index.php'); ?>

Важный файл, который мне нужно описать - это config.php. Необходимо указать детали подключения к базе данных и начать сеанс. Этот класс входа и регистрации не будет работать без сессий. Он также создаст объект класса пользователя, чтобы мы могли использовать его в любом другом файле. Как вы видели раньше, мы включали этот скрипт каждый раз после самого класса.

Также нам нужно указать файлы, которые мы используем в функциях генерации HTML. В этом случае user.php, login.php, activ.php и register.php. Вы можете настроить эти файлы.

<? php session_start (); define ('conString', 'mysql: host = localhost; dbname = login'); define ('dbUser', 'root'); define ('dbPass', 'root'); define ('userfile', 'user.php'); define ('loginfile', 'login.php'); define ('activfile', 'activ.php'); define ('registerfile', 'register.php'); ini_set ('display_errors', 1); ini_set ('display_startup_errors', 1); error_reporting (E_ALL); $ user = new User (); $ user-> dbConnect (conString, dbUser, dbPass); ?>

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

Для этого урока я создал пример того, что может быть в этом разделе в файле user.php script. Вы можете заметить два случая. Если обычный пользователь вошел в систему, он покажет ему только свою информацию. Но если пользователь является администратором, в этом случае его идентификатор роли равен 2 (вы можете изменить его на любой идентификационный номер), тогда он видит список всех пользователей в системе.

<? php require_once '../class/user.php'; require_once 'config.php'; if (IsSet ($ _ SESSION ['user'] ['id']) {$ user-> userPage ();} else {header ('Location: index.php');}?>

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

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

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

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

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

Если у вас есть вопросы или комментарии, вы можете оставить сообщение в качестве комментария к этой статье или опубликовать запрос в службу поддержки в его форум поддержки ,

2017-03-27: Добавлено больше информации о загрузке и установке с помощью инструмента composer.

2017-01-01: обновлена ​​статья, чтобы отразить, что они по-прежнему безопасны в 2017 году

Похожие

Модуль регистрации изображений
Одним из способов документирования выполнения задач и нарушений является их запись в виде фотографий или видеороликов. Преимуществом модуля регистрации изображений является возможность геотегирования записанных фотографий и видео. Эта функция позволяет быстро искать изображения, зарегистрированные во время обслуживания, указанного на карте местоположения - например, в конкретной точке задачи или улице. Fotorejestracja Photobox - это цифровой видеомагнитофон, который работает
Что такое блог и кто такие блогеры? Стоит заниматься блоггингом?
... для продвижения определенной компании, услуги или товара. На сегодняшний день разница между сайтом и блогом стерлась практически до нуля. Очень трудно дать определенное определение ресурса - сайт это или блог. Произошло это, в основном, через трансформацию Систем Управления Содержимым сайта (CMS), которые предлагают современному пользователю душе широкий спектр возможностей, и видение интернета и функционала ресурсов сейчас очень изменилось. На одном из сайтов я читал интересную
Конфигурация Sagemcom 2864
Sagemcom 2864 предназначен для использования в сетях со скоростью свыше 25 МБ / с в сетях, использующих инфраструктуру DSL компании Bells. NCF продал эти модемы с ноября 2013 года по август 2014 года для участников на 25 МБ и более быстрый сервис. Sagemcom 2864 не поставляется с какими-либо руководствами, и, похоже, на сайте компании нет доступных руководств. Подключите разъем питания к Sagemcom 2864, а другой конец - к розетке переменного тока. Примечание
Тестирование на перебор (OWASP-AT-004)
... login"> <input type = "text" name = "username"> <input type = "password" name = "password"> </ form> Атаки грубой силой После перечисления различных типов методов аутентификации для веб-приложения, мы объясним несколько типов атак методом перебора. Атаки по словарю состоят из автоматизированных скриптов и инструментов, которые будут пытаться угадать имена пользователей и пароли из файла словаря. Файл словаря можно настроить и скомпилировать
Как удалить вирус Worm.Win32.AutoRun.iea из системы и зараженных программ
... ите ваш компьютер в безопасности от Worm.Win32.AutoRun.iea Вирус, вредоносное ПО и вымогателей Как удалить Worm.Win32.AutoRun.iea ? Несколько дней назад я заметил некоторые нежелательные действия на моем компьютере с Windows. Поэтому я решил проверить его с установленным на нем антивирусом, и он обнаружил троян. Я был счастлив, когда антивирус удалил инфекцию, но был шокирован, увидев ту же угрозу, когда я снова сканировал компьютер.

Комментарии

И основной вопрос - заводить свой блог или нет?
И основной вопрос - заводить свой блог или нет? С самого начала блог - это был публичный онлайн дневник, в котором авторы публиковали свои мысли, свое видение определенных проблем, обзоры, статьи на свободную тему и так далее, в отличие от сайта, который был предназначен для продвижения определенной компании, услуги или товара. На сегодняшний день разница между сайтом и блогом стерлась практически до нуля. Очень трудно дать определенное определение ресурса - сайт это или

Что может сделать этот класс системы безопасного входа в систему PHP?
Lt;?
PreventDefault ();});}); функция validateEmail ($ email) {var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]]2, enj)?
Lt;?
Lt;?
Lt;?
Lt;?
Php'; $ User-> выход из системы (); заголовок ('location: index.php'); ?
Lt;?