Реализуем авторизацию в админ панели

 

Доброго времени суток дорогой читатель Блога RS! Как я и обещал, сегодня последний пост из цикла статей "Разработка блога с нуля". Все следующие посты будут посвящены улучшению написанного нами проекта. В этом посте нам предстоит написать авторизацию для нашей админ панели. Какой файл мы будем паролить?

 

 

Как мне кажется, нам необходимо запаролить лишь один файл, а именно index.php, так как лишь в нем производится подключение к базе данных. Если вызвать, отдельно, кусочки кода, которые мы подключаем из папки moduls, ничего не произойдет, так как все они требуют подключения к БД. Так что, с помощью этих кусочков, нельзя навредить блогу! Значит паролить их вовсе не обязательно.

 

Цель

 

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

 

Выносим подключения к БД в отдельный файл

 

Так как мы будем использовать этот подключение к БД уже в двух файлах ( в index.php и login.php ) то будет разумнее вынести скрипт подключения в отдельный файл. Так же мы сейчас создадим в этом скрипте переменную в которой будем хранить адрес нашего блога ( в виде http://адрес_блога.ru ). Сначала вынесем скрипт, потом я объясню зачем нам нужна переменная с адресом.

<?php
$nameDB = "blog";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));


if(isset($_GET['server_root'])){$server_root = $_GET['server_root'];unset($server_root);}
if(isset($_POST['server_root'])){$server_root = $_POST['server_root'];unset($server_root);}

$server_root = "http://yoururl.ru/";
?>

Сохраните этот кусочек кода в отдельном файле ( я этот файл назвал db.php и поместил в папку с модулями ) После удалите этот скрипт из файла index.php и вместо него вставьте следующий код

//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
include("moduls/db.php");
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)

Теперь поясню три новых строчки в файле db.php. Строчки

if(isset($_GET['server_root'])){$server_root = $_GET['server_root'];unset($server_root);}
if(isset($_POST['server_root'])){$server_root = $_POST['server_root'];unset($server_root);}

позволят нам удалить переменную если ее кто-то попытается создать GET или POST запросом. Сама же переменная с адресом нужна нам для того, что бы определить, идет ли авторизация с нашего блога, а не с постороннего сервера. Такая защита может уберечь наш блог от взлома, ну если быть точнее, то помогает нам, администраторам и программистам, в это верить

 

Создадим новую таблицу в БД

 

Для начала хочу сказать следующее: в БД мы будем хранить зашифрованный пароль с помощью функции php md5(). Админский логин и пароль мы пропишем в ручную. Я поставлю следующие данные:

Логин: admin

Пароль: 123456

Зашифрованный пароль будет выглядеть так:

e10adc3949ba59abbe56e057f20f883e

То есть если пароль 123456 пропустить через функцию md5 то получится вот такой зашифрованный пароль.

Приступим. Заходим в phpMyAdmin и создаем новую таблицу:

Авторизация будет простенькой, поэтому трех полей нам достаточно. Заполняем поля:

И вставляем в ручную одну строчку в таблицу

 

Скрипт проверки авторизации

 

Сама авторизация представляет собой создание глобальной переменной $_SESSION. То есть если эта глобальная переменная есть, то пользователь авторизован, стало быть скрипт должен проверить, создана ли она ( глобальная переменная ). Если да то ничего не делать, если же нет, то перекинуть на файл login.php.

Перед тем как вызывать глобальную переменную $_SESSION, необходимо стартовать сессию, а именно прописать session_start(); Если этого не сделать, то глобальная переменная $_SESSION просто не будет работать!

В общем вот скрипт который необходимо вставить сразу после подключения к БД в index.php

//СКРИПТ ПРОВЕРКИ АВТОРИЗАЦИИ
if(isset($_GET['logSESS'])) {$logSESS = $_GET['logSESS'];unset($logSESS);}
if(isset($_POST['logSESS'])) {$logSESS = $_POST['logSESS'];unset($logSESS);}

session_start();
$logSESS = $_SESSION['$logSESS'];
if(!isset($logSESS))
{
header("location: login.php");
exit;
}
//СКРИПТ ПРОВЕРКИ АВТОРИЗАЦИИ

Так как значение глобальной переменной $_SESSION переносится в переменную $logSESS, то нам необходимо пресечь попытку создать эту переменную ( $logSESS ) иными способами ( я имею введу предотвратить создание этой переменной с помощью GET и POST запроса ). Именно эту функцию выполняют первые две строчки скрипта.

Далее мы стартуем сессию, и проверяем существует ли глобальная переменная $_SESSION. Если нет, то переносим пользователя на страницу авторизации.

 

Шаблон формы

 

Давайте для начала создадим шаблон. Шаблон представляет собой обычную форму с двумя текстовыми полями

<table width="600px" cellpadding="0" cellspacing="0" border="0" align="center">
<tr>
<td valign="top" align="center">
<form action="login.php" method="post" name="form">
<br>
<input style="width:150px;" name="loginDB" type="text" value="Логин">
<br>
<input style="width:150px;" name="passDB" type="password" value="Пароль">
<br><br><input type="submit" value="Авторизация">
</form>
</td>
</tr>
</table>

Тут нет ничего сложного. Мы не раз создавали подобные шаблоны. Назовем этот шаблон login.html и поместим в паку с шаблонами

 

Файл авторизации

 

Давайте для начала создадим функцию которая нам выдаст форму авторизации. Создаем новый файл, называем его login.php и помещаем его в папку admin

<?php
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
include("moduls/db.php");
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)

//АВТОРИЗАЦИЯ
//место для кода авторизации
//АВТОРИЗАЦИЯ

//мета теги
$header_title = "Авторизация";
$header_metaD = "Авторизация";
$header_metaK = "Авторизация";
//мета теги

function form_author()//функция подключения формы
{
$sm_read = file("templates/login.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его

return $sm_read;//выводим результат
}

$txt = form_author();//вызываем функцию подключения формы

include("templates/index.html");//главный шаблон
?>

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

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

Сейчас если вы попытаетесь проникнуть в админскую панель блога, но Вас перекинет на вот такую страницу

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

//АВТОРИЗАЦИЯ
//уничтожаем переменную с логином и паролем которые были созданы путем ввода их в строку
if (isset ($_GET['loginDB'])) {$loginDB = $_GET['loginDB'];unset($loginDB);}
if (isset ($_GET['passDB'])) {$passDB = $_GET['passDB'];unset($passDB);}

//заносим в отдельные переменные логин и пароль присланных с помощью post запроса
if (isset ($_POST['loginDB'])) {$loginDB = $_POST['loginDB'];}
if (isset ($_POST['passDB'])) {$passDB = $_POST['passDB'];}

if(isset($loginDB) AND isset($passDB))//если существуют логин и пароль
{
if(preg_match("/^[a-zA-Z0-9_-]+$/s",$loginDB) AND preg_match("/^[a-zA-Z0-9]+$/s",$passDB))//проверяем их на корректность ввода с помощью регулярных выражений
{
$prov = getenv('HTTP_REFERER');//определяем страницу с который пришел запрос
$prov = str_replace("www.","",$prov);//удаляем www если есть
preg_match("/(http\:\/\/[-a-z0-9_.]+\/)/",$prov,$prov_pm);//чистим адресс от лишнего, нам необходимо добиться ссылки вот такого вида http://xxxx.ru
$prov = $prov_pm[1];//заносим чистый адрес в отдельную переменную
$server_root = str_replace("www.","",$server_root);//удаляем www если есть

if($server_root == $prov)//если адрес нашего блога и адрес страницы с которой был прислан зарос равны
{
$passDB = md5($passDB);//шифруем введенный пароль

$resultlp = mysql_query("SELECT login,pass FROM user WHERE login='$loginDB'");//выводим из базы данных логин и пароль
$log_and_pass = mysql_fetch_array($resultlp);

if($log_and_pass != "")//если был выведен результат из БД
{
if($loginDB == $log_and_pass[login] AND $passDB == $log_and_pass[pass])//если введенная информация совпадает с информацией из БД
{
session_start();//стартуем сессию
$_SESSION['$logSESS'] = $log_and_pass[login];//создаем глобальную переменную
header("location: index.php");//переносим пользователя на главную страницу
exit;
}
else//если введеная инфо не совпадает с инфо из БД
{
header("location: login.php");//переносим на форму авторизации
exit;
}
}
else//если не найдено такого юзера в БД
{
header("location: login.php");//переносим на форму авторизации
exit;
}
}
else//если запрос был послан с другого адреса
{
header("location: login.php");//переносим на форму авторизации
exit;
}
}
else//если введены не корректный логин и пароль
{
header("location: login.php");//переносим на форму авторизации
exit;
}
}
//АВТОРИЗАЦИЯ

Этот кусочек кода вставляется в файле login.php вместо вот этих строк

//АВТОРИЗАЦИЯ
//место для кода авторизации
//АВТОРИЗАЦИЯ

Как работает скрипт? Для начала уничтожает переменные, с логином и паролем, созданные методом GET ( если такие имеются ). После идет проверка на корректность логина и пароля с помощью регулярных выражений.

Так же производится формирование адреса с которого пришел пользователь. То есть адрес, с которого пришел пользователь, должен быть таким:

http://yoururl.ru/login.php

а после формирование, вот таким:

http://yoururl.ru/

Этот адрес сравнивается с адресом из переменной $server_root которую мы объявили в подключение к БД ( файл db.php )

Далее идут проверки на совпадения введенного пароля и пароля из БД. Только после этих проверок создается глобальная переменная, и пользователь перенаправляется на главную страницу админ панели.

Если же хотя бы одно условие не сработает, то пользователя перенаправят обратно к форме.

Теперь если ввести в окно формы

логин - admin

пароль - 123456

То Вас перенесет в админ панель. Если же вы введете неправильный логин или пароль, Вас перекинет обратно к форме.

 

Кнопка "Выход"

 

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

Вот новый кусочек кода который я вставил, вместо старого, в шаблон index.html

        <!--ЛОГО-->
<div class="logo">
<div class="logoP">
<p style="padding:3px;"><a style="font-weight:100;" href="/index.php">Добро пожаловать в админ панель</a> <a href="exit.php" style="font-size:10px;font-weight:100;">(Выход)</a></p>
</div>
</div>
<!--ЛОГО-->

Теперь создадим новый файл, назовем его exit.php и поместим его в папку admin. Вот код файла

<?php
session_start();//стартуем сессию
unset ($_SESSION['$logSESS']);//удаляем зарегистрированную глобальную переменную
session_destroy();//уничтожаем сессию
header("location: ../");//перебрасываем на главную страницу пользовательской части блога
exit;
?>

Тут каждая строчка имеет комментарий, так, что разберетесь

 

Заключение

 

Ну чтож, на этом я заканчиваю разработку простейшей CMS на php. Если это первый пост который Вы читаете на этом блоге, то вот список всех статей посвященные разработки блога с нуля. Совсем скоро открою рубрику "Улучшения" и продолжу мучить наш проект Так что подпишитесь на новости, и ждите новые посты!

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

Удачи Вам, на сегодня у меня все!

Исходник
 

Возможно Вам будут интересны следующие заметки

Комментарии (77)

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
mail92, 09 Февраля 2012 г. 14:38 пишет:
Гость
Привет, у меня такой вопрос...
А можно ли сделать чтобы в строке ввода(URL) не показывался путь до скрипта, ну к примеру http://test1.ru/moduls/login.php, а надо чтобы просто показывалось http://test1.ru... Просто в статье посмотрел там идет проверка лишь на то чтобы сравнить с чего зашли...
Извините, если не по теме написал...
Rio-Shaman, 09 Февраля 2012 г. 17:19 пишет:
Автор
Не совсем понял вопрос =(
Файл login.php должен находится в папке admin а не в moduls. Поэтому путь будет выглядеть вот так
http://test1.ru/admin/login.php
А что бы показывалось
http://test1.ru/
необходимо переделывать всю механику авторизации.
P.S.: Откуда у Вас рождаются подобные вопросы? =D
Ответ для пользователя: mail92
Илья, 09 Февраля 2012 г. 18:08 пишет:
Читатель
Привет!) Сразу извиняюсь за этакий оффтоп:) Нашел свеженькие комменты, решил отписаться) Пробежался по основным статейкам на вашем блоге...понравилось что все подробно описано. +10 к карме :)

Меня посетила идея тоже заняться написанием CMS для своих нужд, для учебы...изучать PHP я начал недавно...на уровне SAX,DOM,SimpleXML - примерно где-то тут сейчас я :) так что если возникнут глупые вопросы, прошу не ругаться строго :) Думаю с завтрашнего дня плотно засяду на вашем блоге и буду основательно смотреть, изучать, писать...так что комменты будут везде, я думаю :))))

Хотелось бы задать пару вопросов:
1) Не думали ли вы об объектно-ориентированном подходе в создании, а не о процедурном?

2) Не планируется ли выпуск скринкастов? А то вещь весьма популярная...взять тот же Ютуб - пробовал найти что-нибудь по созданию cms - всякая чушь попадается, ничего путевого из русско-язычного...Есть забугорные (там как раз используется ООП), но это забугорные. Они там так быстро говорят что мозг не успевает переводить слова :)))

Вот примерно пока так :)
Rio-Shaman, 09 Февраля 2012 г. 18:55 пишет:
Автор
Здравствуйте! Сразу отвечу на Ваши вопросы:
1. ООП по сути это объедение логики в один объект для удобной работы с ним в дальнейшем. В проекте не такая уж сложная логика, что бы ее объединять в классы.

Так же, на сколько мне известно, классами пользуются в основном в проектах над которыми работают несколько программистов, что бы один программист не разбирался в работе кода другого программиста, а просто пользовался возможностью программы. Так вот над этим проектом работает один программист, стало быть классы тут не к чему. Пользоваться php как ООП (именно в этом проекте), лишь потому, что это возможно, не вижу смысла (ИМХО)

2. Записывать видео уроки мне мешает две вещи.
Первая - я совершенно не умею говорить с аудитории =) постоянно теряю мысль.
Вторая - В данный момент слишком мало свободного места на жестком диске.
Ответ для пользователя: Илья
Илья, 09 Февраля 2012 г. 19:12 пишет:
Читатель
"Так же, на сколько мне известно, классами пользуются в основном в проектах над которыми работают несколько программистов, что бы один программист не разбирался в работе кода другого программиста..."

Как бы да. В этом Вы правы - ООП используется для командной работы...хотя порой конечно с ООП работать более удобнее -свойства, методы, __autoload() - вообще рулят! :) Хотя довольно интересное решение совместить 2 подхода...


"Первая - я совершенно не умею говорить с аудитории =) постоянно теряю мысль."

Человеческий фактор :) Хотя это по сути тоже самое что и самому себе пересказывать что мы делаем - проговаривая мысли вслух. Сразу вспоминается k0stix с его ООП и чайком :)))))))
mail92, 09 Февраля 2012 г. 22:54 пишет:
Гость
Ну у меня такие вопросы появляются потому что я смотрю ваш блог и делаю подобное по нему))), на путь не обращайте внимание, это я авторизацию делаю пользовательскую а не админа...
а скрыть путь до скрипта я хочу для безопасности)))

А так спасибо вам за этот блог, он шикарен, все понятно и легко, главное включить голову, а не просто копи-паст)))
Ответ для пользователя: Rio-Shaman
Rio-Shaman, 10 Февраля 2012 г. 18:56 пишет:
Автор
Для безопасности следует скрывать не путь в адресной строке, а содержимое самой папки, в вашем случае содержимое папки moduls. Знание пути, где содержится файл, с которым пользователю разрешено работать, неизбежно.
Ответ для пользователя: mail92
Alex, 13 Марта 2012 г. 03:13 пишет:
Гость
Здравствуйте. Всё сделал по инструкции. При вводе правильных данных в форму авторизации(login.php) кидает обратно на login.php . Также при вводе неправильных данных. В общем что бы я не вводил - остаюсь на login.php, не могу разобраться, простите чайника за глупую ситуацию. Заранее спасибо.
Alex, 13 Марта 2012 г. 03:16 пишет:
Гость
Вопрос решён: почистил кеш и куки, перезапустил денвер - всё заработало. Простите за ложную тревогу.
Алексей, 25 Апреля 2012 г. 15:19 пишет:
Читатель
Тут снова не то что нужно( Выкидывает обратно на фаорму. Кеш и куки чистил. Ввожу верно. Пробовал отключать шифровку пароля. Ничего)))
Rio-Shaman, 25 Апреля 2012 г. 15:26 пишет:
Автор
Очень важно значение переменной server_root. Большая вероятность того, что не проходит вот это условие
if($server_root == $prov){...}
Проверьте значение обоих переменных, перед сравниванием.
Ответ для пользователя: Алексей
Алексей, 25 Апреля 2012 г. 17:15 пишет:
Читатель
Проблема оказалась там, где я и предполагал. Вы написали, что добиваетесь www.xxx.ru сайта, а я на денвере на локалхост не совсем понимал как правильно прописать) Сработало, когда просто localhost написал)
mkisko, 05 Мая 2012 г. 10:48 пишет:
Гость
не получается залогиниться, так же выдает на страницу login.php и всё.. менял переменную "http://yoururl.ru" на мою "http://s-zl.ru".. Что я не так делаю?(
Rio-Shaman, 05 Мая 2012 г. 14:17 пишет:
Автор
Посмотрите внимательно совпадает ли домен из адресной строки с значением переменной server_root.
Например если Ваш адрес в адресной строке вот такой:

http://s-zl.ru/admin/login.php

То в переменной server_root должно находится следующее значение

http://s-zl.ru/

Так же обратите внимание на слэш (у значение переменной server_root) в конце домена.
Ответ для пользователя: mkisko
Юля, 29 Мая 2012 г. 14:25 пишет:
Гость
Хочу выразить свою признательность автору дошла до данной статьи у меня все получилось и работает :о) Спасибо Вам большое за Ваш труд :о) Были конечно моменты где мне пришлось напрячь свой мозг, но это еще никому не вредило :о)
Игорь, 14 Июня 2012 г. 12:07 пишет:
Читатель
У меня тоже проблема с авторизацией, постоянно выводится login.php. Из комментариев выше, понял, что проблема в переменной server_root. Сайт находится на локальном сервере, в папке adobe. Пробовал ставить значения "adobe", "adobe/", "localhost", "localhost/". Подскажите пожалуйста, в чем ошибка?
Rio-Shaman, 14 Июня 2012 г. 12:20 пишет:
Автор
Если нет прямого домена, то попробуй "http://localhost/" должно сработать
Ответ для пользователя: Игорь
Игорь, 14 Июня 2012 г. 20:17 пишет:
Читатель
ну никак у меня не выходит авторизация, какие строки еще могут на это влиять? И как очищать кэш? я только куки удалял
Ответ для пользователя: Rio-Shaman
Игорь, 14 Июня 2012 г. 20:43 пишет:
Читатель
УРА! ЗАРАБОТАЛО! я прописал http://adobe/
Большое спасибо вам за ваш блог! Долго искал его! И вот нашел, сделал кмс! Диплом почти готов! Обязательно ссылку укажу в списке лит-ры! Теперь буду редактировать стили! Кстати, у вас в стилях не прописано форматирование текста статей, если большая статья, то текст идет в одну строку, а не переносится.
Rio-Shaman, 14 Июня 2012 г. 20:44 пишет:
Автор
Может быть 5 причин почему Вас перекидывает на страницу login.php.
1. Логин администратора содержит не правильный набор символов, то есть что-то кроме букв английского алфавита, цифр, нижнего подчеркивания "_" и тире "-".
2. Пароль содержит не допустимые символы, а именно что-то кроме английских букв и цифр.
3. Переменные server_root и prov не совпадают. В переменной server_root содержится домен сайта, а в переменной prov содержится имя домена с которого посылали логин и пароль.
4. Если в базе данных нет запрашиваемого пользователя.
5. Если введенный логин и пароль не совпадают с данными хранящихся в базе данных.
Проверьте все используемые переменные, это единственный способ узнать в чем причина.

Напишу способ как определить переменные.
1. Сразу после:
    if(preg_match("/^[a-zA-Z0-9_-]+$/s",$loginDB) AND preg_match("/^[a-zA-Z0-9]+$/s",$passDB))
    {
Пропишите:
echo "true";
exit;
Попробуйте авторизоваться, если Вы увидите сообщение, значит логин и пароль составлены правильно. Если нет, то скорее всего вы допустили ошибку когда создавали логин и пароль администратора (ввели не допустимые символы)
2. Уберите код который внедряли в предыдущем пункте, и пропишите сразу после:
$server_root = str_replace("www.","",$server_root);
вот такой код:
echo $server_root." ----- ".$prov;
exit;
Просмотрите совпадают ли эти переменные. Если нет то проблема в переменной server_root, не правильно ввели домен сайта.

3. Уберите код который внедряли в предыдущем пункте, и пропишите сразу после:
            if($log_and_pass != "") //если был выведен результат из БД
            {
вот такой код:
echo "true";
exit;
Так вы проверите найдена ли строчка в базе данных. Если сообщение на экране появилось значит строчка в базе данных есть, если же сообщение не появится значит Вы допустили ошибку при заполнение таблицы user

4. Уберите код который внедряли в предыдущем пункте, и вместо убранного кода следующее:
echo $loginDB." = ".$log_and_pass[login]."||".$passDB." = ".$log_and_pass[pass];
exit;
Просмотрите совпадают ли выведенные данные. Если не совпадают то Вы допустили ошибку при заполнение таблицы user, или вводите не правильные данные в форму.

Если найдете в чем причина сообщите, думаю другим будет полезна данная информация..
Ответ для пользователя: Игорь
Rio-Shaman, 14 Июня 2012 г. 21:00 пишет:
Автор
Рад что Вам не понадобилось проверять почти каждую строчку кода =) Насчет стилей я уже не помню какой там дизайн на Вашей стадии разработки, ибо рабочий дизайн описан в следующей статье...
Ответ для пользователя: Игорь
Schulz, 22 Июля 2012 г. 18:24 пишет:
Гость
Подскажите а что это может быть когда браузер выбрасывает постоянно ошибку 310 На этой странице обнаружена циклическая переадресация.
Rio-Shaman, 22 Июля 2012 г. 19:11 пишет:
Автор
Это означает, что у скрипта постоянно соблюдается условие при котором происходит пере адресация. Тем самым при запуске такого скрипта браузеру приходится бесконечно загружать одну и туже страницу.
Ответ для пользователя: Schulz
Schulz, 22 Июля 2012 г. 19:48 пишет:
Гость
Так как у вас сделать не получилось.Обрезал все if с проверками оставил только одно условие правильно-не правильно.Спасибо Вам статья мне здорово помогла.
Rio-Shaman, 22 Июля 2012 г. 20:01 пишет:
Автор
А что именно у Вас не получилось?
Ответ для пользователя: Schulz
Schulz, 22 Июля 2012 г. 20:28 пишет:
Гость
Да нет все работает.А не получилось сделать защиту server_root.Где-то наверно путь не верный указал вот от того и зацикливает.Я например писал http://site/adminka/ и http://site/ не помогло.В принципе и так сойдет
Роман, 09 Сентября 2012 г. 16:08 пишет:
Гость
В мене в опері працює
в хромі виводить "Ошибка 310 (net::ERR_TOO_MANY_REDIRECTS): Обнаружено слишком много переадресаций."
в мазілі "Firefox визначив, що сервер перенаправляє запит на цю адресу таким чином, що він ніколи не завершиться."
Rio-Shaman, 10 Сентября 2012 г. 00:54 пишет:
Автор
Первым делом надо разобраться какой кусочек кода начинает циклить. Для того чтобы понять это, по очереди комментируйте функцию header(). Узнаете какой именно из операторов if дает сбой, после чего можно понять что не так...
Вообще циклить не должно, использую данный скрипт на своем блоге, и ничего не циклит...
Ответ для пользователя: Роман
Анна, 15 Сентября 2012 г. 17:48 пишет:
Гость
Здравствуйте! Передо мной встала задача сделать авторизацию для админ панели и вот наткнулась на ваш блог. Кстати спасибо вам огромное, здесь много полезной информации. :)
Только вот возникла проблемка, при входе в админ панель не перекидывает на форму авторизации, открывается страница login.php с содержимым шаблона index.html. Никак не могу разобраться почему не загружается login.html. Может вы подскажете в чем может быть причина :)
Rio-Shaman, 15 Сентября 2012 г. 18:38 пишет:
Автор
Результатом функции form_author() является html код который содержит все, что находится в файле login.html. Данный html код должен попасть в переменную txt. А эта переменная должна выведется в шаблоне index.html.
Так что загружаться должен именно index.html, в котором будет содержаться шаблон login.html
Ответ для пользователя: Анна
Вася, 18 Октября 2012 г. 13:28 пишет:
Гость
//уничтожаем переменную с логином и паролем которые были созданы путем ввода их в строку
Для чего это нужно?
Rio-Shaman, 18 Октября 2012 г. 13:51 пишет:
Автор
Некоторые серверы сконфигурированы таким образом, что способны перевести глобальные переменные $_GET и $_POST (и др) в переменные. Например переменная $_GET['login'] сервером преобразуется в переменную $login без ведома разработчика. Именно поэтому мы специально объявляем переменные и уничтожаем их.

p.s. Спасибо что дали мне повод обратить внимание на код. В данных строчках была копипастная опечатка. Надо было написать не
if (isset ($_GET['loginDB'])) {$loginDB = $_POST['loginDB']; unset($loginDB);}
а
if (isset ($_GET['loginDB'])) {$loginDB = $_GET['loginDB']; unset($loginDB);}
Ответ для пользователя: Вася
Иван, 24 Декабря 2012 г. 23:44 пишет:
Гость
хороший движок, минимум наворотов :)
hamster, 12 Января 2013 г. 02:26 пишет:
Гость
Вот я какой раз уже замечаю букву "s" в регулярных выражениях, но не знаю, что она означает, можете ли вы подсказать мне?
Rio-Shaman, 12 Января 2013 г. 03:06 пишет:
Автор
Без этого флага регулярное выражение будет искать не во всем тексте, а только в первой строчке. Первой строчкой он будет считать все, что перед переносом строки.
Почитайте про флаги у регулярных выражений, узнаете очень много интересного =)
Ответ для пользователя: hamster
Grej, 17 Января 2013 г. 20:19 пишет:
Гость
Такие ошибки вот у меня?? как исправит?

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\OpenServer\domains\localhost\acp\index.php:1) in C:\OpenServer\domains\localhost\acp\index.php on line 7

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\OpenServer\domains\localhost\acp\index.php:1) in C:\OpenServer\domains\localhost\acp\index.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\localhost\acp\index.php:1) in C:\OpenServer\domains\localhost\acp\index.php on line 11
Rio-Shaman, 17 Января 2013 г. 23:29 пишет:
Автор
Перед вызовом функции session_start() был отправлен заголовок... Ищите до вызова функции session_start() пустые строчки, оператор echo, все, что могло бы вывести в браузер какую либо информацию... Ищите и убирайте...

Так же проблема может быть в кодировке.. Вы можете наблюдать вот такие символы в самом верху вашего сайта:
п»їп»ї
Если это так, то Вам необходимо сменить кодировку. Вот статья по этому поводу:
http://rio-shaman.ru/index.php?blog=133
Ответ для пользователя: Grej
art-lady, 16 Апреля 2013 г. 17:41 пишет:
Читатель
а что делать, если всё это перепробовала, и вроде всё в порядке, а в админку всё равно не пускает?....
Ответ для пользователя: Rio-Shaman
Алексей, 16 Апреля 2013 г. 17:56 пишет:
Автор
Скорее всего Вы что-то упустили, ибо других причин не пускать в админ панель вроде бы нет.
Самая распространенная проблема это несовпадение переменной server_root и переменной prov. Особенно часто данная проблема видна если адрес хоста имеет приблизительно вот такой вид:

http://localhost/website/

Ибо в переменной prov образуется вот такие данные:

http://localhost/

а в переменной server_root лежат вот такие:

http://localhost/website/
Ответ для пользователя: art-lady
Vet, 23 Мая 2013 г. 18:56 пишет:
Гость
Прошу прощения, но у меня не выводит форму авторизации. Я не нашел где ми объявляем переменную text, Может что то не понимаю.
Алексей, 23 Мая 2013 г. 22:30 пишет:
Автор
Ну для начала, в примере, описанном на данной странице, используется переменная txt а не text. Может в этом проблема?
Ответ для пользователя: Vet
Vet, 24 Мая 2013 г. 09:59 пишет:
Гость
Nu.... ne nastolko ja ne ponimaju u menja toze txt no ne vivodit!
Ответ для пользователя: Алексей
Алексей, 24 Мая 2013 г. 10:17 пишет:
Автор
Вы до этой заметки дошли по циклу статей "Создать блог с нуля"?
Вот ссылка на цикл http://rio-shaman.ru/sozdat-blog/
Ответ для пользователя: Vet
Vet, 24 Мая 2013 г. 12:05 пишет:
Гость
Ja pitajus prikrutit adminku k svoei stranice.Znanija po html/css u menja dostatochnie, a vot php vsje taki stradaet poetomu mne i stala interesna vasha razrabotka!
Алексей, 24 Мая 2013 г. 12:20 пишет:
Автор
Переменная $txt выводится в шаблоне index.html. У Вас есть данный шаблон?
Ответ для пользователя: Vet
Vet , 24 Мая 2013 г. 12:27 пишет:
Гость
Da. svoi shablon. Tak peremennaja privjazana k opredelennomu DIVu? Ili klassu.
Алексей, 24 Мая 2013 г. 13:10 пишет:
Автор
Вы должны понимать, что данная заметка является часть глобального цикла. И многое из того, что Вам нужно (а точнее те элементы из-за которых у Вас что-то не работает) есть в предыдущих постах.
Переменная txt выводится посредством оператора echo в шаблоне index.html. Переменная никак не привязана ни к диву ни к классу.
Ответ для пользователя: Vet
Vet, 24 Мая 2013 г. 13:48 пишет:
Гость
Spasibo!!!!! razobralsja budu kovirjat dalshe.
Дмитрий, 15 Июля 2013 г. 10:35 пишет:
Гость
Что то не получается сделать авторизацию, как то один раз сработало с 20 попытки, а потом перестало работать, видимо все дело в адресе, ибо при проверке выдает http://site.ru ----- http://site.ru/

Видимо из-за слэша не работает, а вот как его убрать или наоборот добавить не пойму.

Вообще изначально не работало из-за того то в бд ставил пароль не зашифрованный, когда убрал в пхп мд5 все заработало, потом поставил шифр в бд и в пхп, работать перестало,в ернул обратно и тоже уже не работает даже без мд5, видать теперь проблема с слэшем?
Алексей, 15 Июля 2013 г. 10:43 пишет:
Автор
Есть два файла:
1. /moduls/db.php
2. /admin/moduls/db.php
В каждом из этих файлов есть переменная $server_root. В данной переменной и нужно написать адрес с слешем в конце
Ответ для пользователя: Дмитрий
Дмитрий, 15 Июля 2013 г. 11:19 пишет:
Гость
Эмм...дело в том что у меня не полностью ваш движок, я пишу свой, а ваш блог читаю и всякое интерестное оставляю себе на заметку и если нужно реализую у себя. Поэтому у меня названия и директроии немного другие, а слэш указан в файле поключения написано так http://site.ru/
Дмитрий, 15 Июля 2013 г. 12:49 пишет:
Гость
Извеняюсь за столько комментов :) Можете по удалять :) Вообщем все заработало, вот только я так и не понял как, я просто кое-что скопировал в другое место, а потом вернул опять как было и чудо появился слэш и все заработало :)
Артем, 23 Августа 2013 г. 14:45 пишет:
Гость
Здравствуйте, все получилось, все красиво, вот только не хочет переходить в админ панель, проще говоря пароль не пашет, все перепробовал, не конектит по адресу "http://myurl/admin/index.php"
Алексей, 23 Августа 2013 г. 16:42 пишет:
Автор

Инструкция "что делать" есть вот в этом сообщение

Ответ для пользователя: Артем
Йа, 08 Марта 2014 г. 12:40 пишет:
Гость
Привет Шаман! Я правильно понимаю что в папке admin располагается 2 папки: moduls, templates и 4 файла: index.php, login.php, login.html, и exit.php. В папке modules db.php а в папке templates index.html и login.html ?
Йа, 08 Марта 2014 г. 13:38 пишет:
Гость
Сделал все как здесь написано. После того как я захожу на страницу mysite.ru/admin/index.php сразу появляется страница "Добро пожаловать в админ панель (Выход)" хотя я планирую увидеть форму ввода логина и пароля и только после этого эту страницу. Подскажите в чем проблема? Почему не работает?
Алексей, 11 Марта 2014 г. 10:13 пишет:
Автор
Вы в папке admin к index.php подключили скрипт проверки авторизации?
Ответ для пользователя: Йа
Евс, 31 Марта 2014 г. 23:06 пишет:
Гость
Здравствуйте! Открываю http://sait.ru/admin/index.php a там -http://sait.ru/admin/login.php - и гугле пишет - На этой странице обнаружена циклическая переадресация. Что делаю не так?
Алексей, 01 Апреля 2014 г. 10:50 пишет:
Автор
Вы прикрепленный исходник пробовали тестить?
Ответ для пользователя: Евс
Владислав, 05 Июня 2014 г. 17:11 пишет:
Гость
Доброго здоровья!
Воспользовался ВАШЕЙ разработкой, для дополнительной защиты... Слегка подредактировал, дописал... в процессе, заметил, что шифрование пороля в md5, не происходит, то есть, ели через базы, прописываю пароль в md5, то пароль становится не читаемым, для админки! А так очень даже интересное решение, на "инъекции"- вроде как проходит, в смысле защишено, а вот вопроса-
1. Насколько сильна защита , в пределах разумного конечно?
2.Чем и как могу отблагодарить, за идею, которой надеюсь воспользуюсь?
Владислав, 06 Июня 2014 г. 09:23 пишет:
Гость
Прошу прощения, в базах кодируется нормально, только вот знаки решетки и прочее, подрезаются по всей видимости функцией prg_match, а чисто буквенный+цифры - кодирует в .md5...
Спасибо.
Алексей, 07 Июня 2014 г. 22:38 пишет:
Автор
1. В RS-BLOG версии 2.0.0 (та которая собиралась по материалу на блоге) защита оставляет желать лучшего... в версии 2.8.0 (та которую я рассылаю по почте) более безопасна..
2. Не совсем понял вопроса... что за идея?
Ответ для пользователя: Владислав
Владислав, 08 Июня 2014 г. 07:52 пишет:
Гость
Поверьте ничего "крамольного". Просто мне пришлось переделывать админку на сайте. Бился дней пять, пока не нашел у ВАС, способ построения запросов. В php, несколько не силен(в отличии от css, html,jquery)... Так что еще раз спасибо. А по второму вопросу? Может счет какой скините, я посильно, так сказать, не поддержку проекта...
Ответ для пользователя: Алексей
Ruslan, 19 Июля 2014 г. 01:37 пишет:
Читатель
Привет Алексе! У меня как странно как и большенства была такая ошибка как при вводе данных в форму авторизации перенаправляло на login.php опять же, так как я в сфере программирования давно я решил проблему быстро таким образом:
                else//если введеная инфо не совпадает с инфо из БД
                {
                    header("location: login.php");//переносим на форму авторизации
                    exit; 				
                }
            }
            else//если не найдено такого юзера в БД
            {
                header("location: login1php");//переносим на форму авторизации
                exit;
            }
        }
        else//если запрос был послан с другого адреса
        {
            header("location: login.php");//переносим на форму авторизации
            exit; 			
        }
    }
    else//если введены не корректный логин и пароль
    {
        header("location: login.php");//переносим на форму авторизации
        exit; 
    }	
}
я по очереди подставлял к location: login.php цифру 1 то есть так location: login1.php чтобы узнать ошибку, и вам люди советую поступить так же у меня была проблема в $server_root урл был так $server_root = "sitelocal"; так как я на лакалке поменял на $server_root = "http://sitelocal/"; заработало но привело к следущей ошибке:
Предупреждение: mysql_fetch_array() ожидает параметр 1 to be resource, boolean given in X:\home\sitelocal\www\administrator\login.php на линии 30

Предупреждение: Не удается изменить информацию заголовка - заголовки уже отправлены (выход начался в X:\home\sitelocal\www\administrator\login.php:30) X:\home\sitelocal\www\administrator\login.php на линии 49
в этом то и суть проблемы как решить не подскажешь?)
Ruslan, 20 Июля 2014 г. 16:33 пишет:
Читатель
ауууу
Ответ для пользователя: Ruslan
Ruslan, 20 Июля 2014 г. 22:08 пишет:
Читатель
Всё как обычно сделал сам) спасибо за уроки.
Ответ для пользователя: Ruslan
Алексей, 20 Июля 2014 г. 22:56 пишет:
Автор
Ну это же замечательно, что Вы сами разобрались :-) если не секрет, в чем была проблема?
Ответ для пользователя: Ruslan
Ruslan, 21 Июля 2014 г. 21:47 пишет:
Читатель
Ошибка была моя, пришлось читать статьи про mysql так нечего и не понял потом, дошло что если ошибка с mysql значит беда с базой данных полез в db.php и увидел что название базы данных не "db" как я писал а "ви" не чайно изменил раскалдку клавиатуры, просто пишу очень быстро не замечаю нечего)
Ответ для пользователя: Алексей
Андрей, 26 Октября 2015 г. 23:40 пишет:
Гость
Алексей, сделал поочередно все проверки что Вы описали, все прошло нормально. Но в админку попасть не могу все время перекидывает на /admin/login.php Очень нужна Ваша помощь, сам явно не разберусь - новичок совсем)))
Заранее спасибо за помощь.
Ответ для пользователя: Rio-Shaman
Алексей, 27 Октября 2015 г. 10:17 пишет:
Автор
Каждый этап проверки в случае неудачи отрабатывает блок else (например)
else {
    header("location: login.php"); //переносим на форму авторизации
    exit;
}
Нужно понять какой именно отрабатывается блок. Замените в коде все
header("location: login.php");//переносим на форму авторизации
exit;
на
die('1');
die('2');
и так далее. В случае ошибки Вас не перекинет на /admin/login.php а покажет цифру, по которой можно будет понять какое именно условие не выполняется.
Ответ для пользователя: Андрей
Андрей, 27 Октября 2015 г. 12:29 пишет:
Гость
Смотрите, для начала я расскажу что у меня в Базе хранится:
login: admin
pass: e10adc3949ba59abbe56e057f20f883e
Теперь по-поводу того что выводится:
Если пароль вводить 123456 то выводится цифра 1, то есть как я понял введеная инфо не совпадает с инфо из БД
Если пароль вводить e10adc3949ba59abbe56e057f20f883e то выводится цифра 4, то есть получается введены не корректный логин и пароль
Вот такая запутанная ситуация(((
Ответ для пользователя: Алексей
Алексей, 27 Октября 2015 г. 12:48 пишет:
Автор
после строки
$log_and_pass = mysql_fetch_array($resultlp);
напишите вот так
var_dump($log_and_pass); die();
нужно понять есть ли что-то в выборке...
Ответ для пользователя: Андрей
Андрей, 27 Октября 2015 г. 12:51 пишет:
Гость

Вывелась следующая строка:

array(4) { [0]=> string(5) "admin" ["login"]=> string(5) "admin" [1]=> string(33) "e10adc3949ba59abbe56e057f20f883e " ["pass"]=> string(33) "e10adc3949ba59abbe56e057f20f883e " }
Ответ для пользователя: Алексей
Алексей, 27 Октября 2015 г. 12:58 пишет:
Автор
У Вас походу в базе данных пароль с пробелом в конце
Ответ для пользователя: Андрей
Андрей, 27 Октября 2015 г. 13:05 пишет:
Гость
Алексей, спасибо огромное за помощь!!!
Действительно в БД убрал пробел в конце и ВСЕ ЗАРАБОТАЛО!!!!))))
Ответ для пользователя: Алексей
SAM, 03 Мая 2016 г. 15:24 пишет:
Гость
Делай в папке "admin" папку "login" кидай в него файл login.php, только переименуй его в index.php и путь будет http://test1.ru/admin/login
Евгений, 05 Ноября 2016 г. 10:50 пишет:
Гость
При проверке отсутствия авторизации выводит сообщение "нет такого пользователя"