Лекция

Тема: «Создание административной панели»

План.

1. Понятие административной панели

2. Авторизация администратора

3. Создание страниц административной панели

4. Файл .htaccess

5. MD5 хэширование в PHP

 

1. Понятие административной панели

 

Часто приходится управлять сайтом: добавлять новые материалы, управлять пользователями, голосованиями. Безусловно, это можно делать через phpMyAdmin, но это весьма неудобно, поэтому хорошим решением будет создать административную панель для сайта.

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

Чтобы перейти к созданию админ-панели, сначала необходимо выполнить следующее:

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

2) необходимо принять решение, какие данные нужны в админ-панели. Например, видеть пользователей сайта, статьи, может быть, какие-нибудь опросы.

3) создать методы для управления админ-панелью. Здесь должны быть созданы методы, которые позволяют делать выборку из самых разных таблиц, а также добавлять и редактировать записи в них. И сделать подобные методы нужно для всех таблиц, с которыми вы хотите работать в админ-панели. Например, самый простой пример с пользователями. Минимальный набор требуемых методов: выборка всех пользователей, добавление нового пользователя, изменение пользователя. Безусловно, все эти задачи должны быть Вами уже реализованы при создании программы управления сайтом, поэтому здесь Вам нужно будет только обратиться к старым функциям и, возможно, как-то изменить данные конкретно для админ-панели.

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

 

Админ-панель располагается на отдельной странице, которая имеет примерно такой адрес: http://mysite.ru/adminpanel.php.

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

Основные элементы для работы административной панели сайта:

- авторизация;

- главная страница;

- инструменты редактирования;

- работа с базой данных.

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

1) главная страница содержит приветственную информацию, логотипы, инструкции и прочее;

2) страница поиска книг по некоторым категориям, т.е. в зависимости от выбора пользователя (от критериев поиска: по автору книги, по названию, по начальным символам названия книги) отображаются некоторые книги.

Это то, что видит пользователь.

Какие процессы происходят на страницах сайта и что они из себя представляют?

Главная страница – может быть статичной.

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

Пусть база данных будет состоять из одной таблицы с данным о книгах (для упрощения объема кода и пояснений).

Таблица «книга» содержит поля: идентификатор книги (id), автор(ы) книги (avtor), название книги (nazv), год издания (god), адрес расположения книги (url).

В папке, где расположен сайт, имеются следующие каталоги:

index.php – главная страница сайта

img – каталог изображений, используемых для оформления сайта

pages – каталог, в котором находятся страницы сайта (в нашем случае, страница поиска книг)

stylecss-стили оформления страниц сайта.

 

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

Какие функции должна выполнять админ-панель?

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

2) редактировать данные по имеющимся книгам в базе данных;

3) удалять информацию о книге из базы данных и саму книгу с места, где она хранится на сайте.

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

 

В каталоге admin должен быть файл index.php – главная страница административной панели, которая даст выбор действия администратору.

Например, в нашем случае это может быть такая страница (admin/index.php):

 

 

Cтраница admin/index.php имеет такой вид:

 

<!DOCTYPE HTML>

<html lang="ru">

<head>

            <meta charset="windows-1251">

            <title>Админпанель</title>

            <link rel="stylesheet" href="style/style_index.css" />

</head>

<body>

            Контейнер с текстом

 

            Контейнер с выбором действия (с кнопками):

                        Список книг

                        Еще кнопка

                        Еще кнопка

                        Выход

</body>

</html>

 

При нажатии на кнопку «Список книг» администратор переходит на страницу, например, admin/book.php, где получает возможности добавления новой книги, редактирования данных книг и удаление книги, т.е. возможности по работе с таблицей «книги» из БД.

Страница admin/book.php имеет следующий вид:

 

<!DOCTYPE HTML>

<html lang="en-US">

<head>

            <meta charset="utf-8">

            <title>Редактирование книг</title>

            <link rel="stylesheet" href="style/style_book.css" />

</head>

<body>

            Выбор действия для администратора в виде кнопок: редактирование, добавление, удаление книги

 

            Обработка кнопки Редактирования

            Обработка кнопки Добавления

            Обработка кнопки Удаления

 

Вывод информации по всем книгам из базы данных

Реализация постраничной пагинации для отображения информации по книгам

            </body>

            </html>

 

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

Кнопка «Выйти» позволяет завершить работу в административной панели.

Если ограничиться только созданнем файлов admin/index.php и admin/book.php, то любой пользователь сети, который наберет в адресной строке браузера путь к административной панели http://mysite.ru/admin/index.php или странице редактирования книг http://mysite.ru/admin/book.php, получит доступ ко всем данным и сможет нанести вред сайту.

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

 

2. Авторизация администратора

 

Авторизация – это процесс определения пользователя (администратора) сайтом. Для этого пользователь (администратор) обычно должен ввести свой логин и пароль.

Авторизацию администратора можно сделать двумя способами. Если администраторов несколько, то в таблицу с пользователями в БД можно добавить поле, в котором указывать, что пользователь является администратором. А можно в скрипте авторизации просто передавать права администратора конкретному пользователю, т.е. если пользователь введет правильный логин и пароль. Будем использовать второй вариант. Назовём страницу авторизации login.php.

Администратор желает попасть на страницу административной панели admin/index.php, но его отправляют на страницу авторизации. Там он вводит логин и пароль. Если они верные, то администратора перенаправляют на страницу admin/index.php, где ему будут доступны возможности этой страницы. На всех остальных страницах, реализующих возможности админ-панели, также необходимо сначала проверить, авторизован ли администратор. Если авторизован, то даем возможности страницы, на которую он зашел.

Авторизация администратора реализуется с помощью сессий.

Код страницы admin/login.php имеет вид:

 

<?php

//стартуем сессию

session_start();

//записываем в сессию логин администратора

$_SESSION["login"]= $_POST['T1'];

//записываем в сессию пароль администратора

$_SESSION["pass"]=$_POST['T2'];

//проверяем, если нажата кнопка и правильно введен логин (admin) и пароль администратора (111)

if ($_POST['B1'] && $_SESSION["login"]=="admin" && $_SESSION ["pass"]=="111")

{

     //записываем в сессию, что пользователь авторизован

     $_SESSION["auth"]=true;

     //отправляем на главную страницу админ-панели

     header("Location: index.php");

}

//если не нажата кнопка или неправильно введен логин или пароль администратора

else

{

//отображаем страницу с формой

?>

<!DOCTYPE HTML>

<html lang="ru">

<head>

     <meta charset="windows-1251">

     <title>Login</title>

     <link rel="stylesheet" href="style/style_login.css" />

</head>

<body>

<!--форма для ввода логина и пароля-->

<form method="POST" >

 

<input type="name" class="form_edit" name="T1" placeholder="Имя" required>

 

<input type="password" class="form_edit" name="T2" placeholder="Пароль" required>

 

<input alt="" class="form_button" src="" type="submit" name="B1" value="Войти">

</form>

<?php

}    //окончание else

?>

 

3. Создание страниц административной панели

 

Если пользователь авторизован, то его отправляют на страницу admin/index.php, которая поменяет свой вид из-за того, что на странице должна быть проверка на авторизацию:

 

<?php

//стартуем сессию

session_start();

//если пользователь не авторизован

if (empty($_SESSION ["auth"]))

//отправляем его на страницу авторизации

header("Location: login.php");

//если пользователь авторизован

else

{

//отображаем содержимое главной страницы админ-панели, ее возможности

?>  

<!DOCTYPE HTML>

<html lang="ru">

     Код страницы admin/index.php

</html>

 

<?php

}

?>

 

Страница admin/book.php (с возможностями редактирования, удаления, добавления книг) поменяет свой код на такой:

 

<?php

//стартуем сессию

session_start();

//если пользователь авторизован

if (isset($_SESSION ["auth"]))

{

     отображаем содержимое страницы book.php

}

else //если администратор не авторизован

{

     //отправляем его на страницу авторизации

     header("Location: index.php");

}

?>

 

Все остальные страницы (если они имеются) административной панели строятся по такому же принципу, что и admin/book.php. Сначала выполняется проверка на авторизацию администратора. Если администратор авторизован, то ему отображают содержимое страницы. Если администратор не авторизован, то его отправляют на страницу авторизации.

 

Если администратор выходит из админ-панели, нажав кнопку «Выйти», то должно происходить перенаправление пользователя на страницу logout.php, где происходит удалении сессии. После чего пользователь будет считаться неавторизованным.

Файл logout.php имеет код:

 

<?php

     //стартуем сессию

          session_start();

         //разрушаем сессию

          session_destroy();

     ?>

 

4. Файл .htaccess

 

Файл .htaccess (сокращение от «hypertext access») переопределяет настройки самого популярного типа веб-серверов Apache и его аналогов.

Файл нужен для более гибкой настройки сервера под задачи оптимизатора. Задавать правила в .htaccess не стоит, если у вас есть доступ к главному конфигурационному файлу сервера .httpd.conf или apache.conf (название зависит от настроек операционной системы). Изменения в нем вступают в силу быстрее, запросы не перегружают сервер. Однако очень часто такого доступа нет, например, в случае с виртуальным хостингом. Тогда приходится прописывать нужные настройки через .htaccess.

 

Возможности .htaccess для оптимизации сайта:

1.      Настройка редиректов для SEO.

2.      Обеспечение безопасности ресурса в целом и отдельных разделов.

3.      Настройка корректного отображения сайта.

4.      Оптимизация скорости загрузки.

 

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

Если файл .htaccess отсутствует, создайте его в текстовом редакторе и разместите в корневой папке сайта или в нужном каталоге (потребуется доступ к хостингу или по ftp).

 

Синтаксис .htaccess

Синтаксис файла простой: каждая директива (команда) начинается с новой строки, после знака # можно добавлять комментарии, которые не будут учитываться сервером. Изменения на сайте вступают в силу сразу, перезагрузка сервера не требуется.

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

Основные спецсимволы:

^ — начало строки;

$ — конец строки;

. — любой символ;

* — любое количество любых символов;

? — один определенный символ;

[0-9] — последовательность символов, например, от 0 до 9;

| — символ «или», выбирается или одна группа, или другая;

() — иcпользуется для выбора групп символов.

 

Основные переменные:

%{HTTP_USER_AGENT} — поле User-Agent, которое передает браузер пользователя;

%{REMOTE_ADDR} — IP адрес пользователя;

%{REQUEST_URI} — запрашиваемый URI;

%{QUERY_STRING} — параметры запроса после знака ?.

 

301 редирект через файл .htaccess

Это потребуется в следующих случаях:

·         изменилась структура сайта и у страницы поменялся уровень вложенности;

·         страница перестала существовать, но нужно сохранить ее входящий трафик (например, в случае отсутствия товара обычно делают переадресацию на товарную категорию);

·         поменялся URL, что крайне нежелательно, но тоже встречается.

 

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

 

RewriteEngine On

 

301 Редирект с одной страницы на другую (или сайт)

Для этого в файл .htaccess вносим следующие строки:

 

Redirect 301 /старая-страница.html http://сайт.рф/новая-страница.html

Правильное изменение страниц ошибок через .htaccess

Когда пользователь хочет увидеть сайт (отправляет запрос на сервер хостера), то сервер возвращает ему ответ с кодом. Коды 1-399 свидетельствуют о нормальной работе сервера, а коды 400-599 сообщают об ошибке сервера.

Например, если сервер с вашим сайтом перегружен, или у него происходит перезагрузка, то пользователь увидит текст ошибки (например, 500 Internal Server Error), подумает, что сайт больше не будет работать и больше никогда на него не вернется. Наиболее распространенным решением является составление собственной страницы вместо стандартной 404-ошибки. Эта ошибка показывается пользователю, если введен адрес несуществующей страницы.

Опытные вебмастеры создают свою страницу вместо стандартной, на которой пишут, что человек перешел по несуществующей ссылке и предлагают поискать нужную информацию на сайте, а не уйти с него. Чтобы показывать пользователям свою страницу ошибки вместо стандартной, нужно создать отдельную страницу (например, http://yoursite.com/404.html) и добавить соответствующий код в файл .htaccess. Вот примеры кода, который нужно добавить:

 

ErrorDocument 400 http://yoursite.com/400.html

ErrorDocument 404 http://yoursite.com/404.html

ErrorDocument 500 http://yoursite.com/500.html

 

Если вы хотите подставить другую страницу вместо ошибки 403, то нужно указывать еще текстовое сообщение, которое будет показано, например:

 

ErrorDocument 403 "Sorry can't allow you access today, see you later :)"

 

Защита сайта от кражи картинок

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

 

#Запрещает кражу картинок

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?yoursite.com/ [nc]
RewriteRule .*.(gif|jpg|png)$ http://yoursite.com/images/stop_stealing.gif[nc]

 

yoursite.com - адрес вашего сайта
http://yoursite.com/images/stop_stealing.gif - путь к картинке, которую вы сами должны создать.

На ней обычно пишут "не крадите картинки с чужих сайтов" или что-то подобное.

 

Как заблокировать доступ к сайту для пользователя по IP?

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

 

#Вносим нежелательные IP адреса
allow from all
deny from 164.186.15.116
deny from 124.153.34.144

 

Блокировка доступа к сайту для всех IP кроме проверенных

Чтобы заблокировать доступ для всех, кроме конкретных IP-адресов, добавляем такой код:

 

#Запрещает доступ для всех, кроме указанных IP-адресов
ErrorDocument 403 http://www.yoursite.com
Order deny,allow
Deny from all
Allow from 164.186.15.116
Allow from 124.153.34.144

 

Изменение кодировки сайта через .htaccess

Бывает такое, что один пользователь заходит к вам на сайт и видит его нормальным, а другой видит неизвестные символы вместо букв. Это происходит из-за кодировки сайта. Чтобы браузер пользователя правильно ее распознал, сайт делается в одной из популярных кодировок:

 

UTF-8 - универсальная двухбайтовая кодировка

Windows-1251 - Кириллица (Windows)

KOI8-r - Кириллица (КОИ8-Р)

cp866 - Кириллица (DOS)

Windows-1250 - Центральная Европа (Windows)

Windows-1252 - Западная Европа (Windows)

 

Также кодировку нужно указывать в мета-теге каждой страницы сайта, это сообщает браузеру в какой кодировке сделан сайт.

<meta http-equiv="content-type" content="text/html; charset=Windows-1251">

Если данный мета-тег не указан, то можно сообщить браузеру какая у вас кодировка с помощью файла .htaccess:

 

AddDefaultCharset WINDOWS-1251

 

Если работают оба варианта (и мета-тег, и файл .htaccess), то очень важно, чтобы кодировка в них совпадала.

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

 

CharsetSourceEnc WINDOWS-1251

 

Чтобы выключить перекодировку сервера нужно вписать:

 

CharsetDisable on

 

5. MD5 хэширование в PHP

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

Функция MD5 хэширования в PHP называется md5(). Принимает функция одну строку, которую необходимо зашифровать. Функция возвращает MD5 хэш:

 

<?php
  $str = "MyPassword";
  echo md5($str);
?>

 

Запустив данный скрипт, Вы увидите MD5-хэш, соответствующий строке "MyPassword". То есть простейший скрипт проверки логина и пароля имеет вид:

 

<?php
  $login = "Admin";
  $password = "48503dfd58720bd5ff35c102065a52d7"; //
В реальности считывается из БД
if (($_GET['login'] == $login) && (md5($_GET['password']) == $password)) echo "Welcome!";
else echo "Access denied";
?>

 

Теперь, если Вы пройдёте по ссылке:

"http://путь_к_скрипту.php?login=Admin&password=MyPassword", то увидите: "Welcome!".

 

Свойства MD5-хэширования.

1.      MD5-хэш содержит 32 символа

2.      MD5-хэш уникален для каждой строки

3.      Процесс MD5-хэширования необратим

4.      Процесс MD5-хэширования достаточно медлителен

 

Третий пункт – самый важный, потому что, если бы он был обратим, то смысл хэширования практически бы отсутствовал. Глупо шифровать, например, пароли, если их можно легко потом расшифровать.

Четвёртый пункт также является очень большим плюсом. Почему? Очень просто: человек, который будет вынужден подождать этот процесс 0.001 секунды, сильно не пострадает. А вот злоумышленник, который будет перебирать пароли пострадает резко, так как медлительность алгоритма уже задаёт предел – 1000 паролей в секунду. Хотя, безусловно, скорость зависит от быстродействия сервера. Но тем не менее, для злоумышленника низкая скорость получения MD5-хэша – это очень большая проблема.

Никогда не храните пароли в открытом виде! Поэтому всегда отправляйте пароли в базу данных в виде MD5-хэша, и, соответственно, сравнивайте хэши паролей, а не сами пароли.