Пришло время второй части саги о создании собственного движка блога.
Теперь о создании своего движка блога. Я реализовал следующее: создание/редактирование/удаление постов, создание/редактирование/удаление категорий, написание комментариев и их редактирование через систему администрирования. Скачать то, что получилось можно по ссылке в конце поста (там пока что архив без редактирования комментариев из админки). Когда дойдем до безопасности, я залью этот движок на тестовый поддомен и можно будет посмотреть, что вышло. И опять эта статья обещает быть очень длинной. Боюсь, что придется ее разрезать еще на три части – авторизация в админке (эта статья), действия с постами и категориями, действия с комментариями и комментирование. А потом еще две части – вывод всего этого на сайт и безопасность движка. Пора писать книгу. (Если кого-то не устраивает такая «санта барбара» – пишите, буду делать статьи длиннее)
Для начала замечу, что все GET-параметры передаются через .htaccess и «откуда они берутся» вопрос не принимается :) Это я объяснил в первой части.
Создание системы администрирования.
Я вообще рекомендую всегда разрабатывать движок с админки, т.к. в ней частично или полностью реализован вывод данных, то есть фактически – пользовательская часть. Тогда создание пользовательской части пойдет быстрее, на мой взгляд. В общем, с админки и начнем.
Располагается она по адресу /vrotmnenogi-admin/, как заявлено в ТЗ (см. первую часть). Я довольно быстро раскаялся в своей дурацкой шутке, т.к. писать везде такой длинный адрес не особенно удобно :). Но от ТЗ мы не будем отступать принципиально, это полезный навык. Простите мне такой бред, я честно не хотел :lol:
Конечно, для начала нужно сделать в админке систему входа, чтобы кто попало не мог редактировать содержимое блога. Авторизация будет вполне обычная – через логин и пароль. Их md5-хеш будет сохраняться в Cookie и по нему пользователь будет проверяться каждый раз, когда что-то делает в админке.
MD5 – в данном случае применяется как однонаправленный алгоритм шифрования строк произвольной длины и получения 128-битного хеша. Другими словами, если зашифровать любое слово этим алгоритмом, то обратно расшифровать его уже нельзя. Понятно, что для проверки нужно зашифровать введенный пользователем логин/пароль и сравнить его с уже имеющимся хешем. Если они совпадают, то пользователь ввел правильный логин/пароль.
Храниться имя и пароль будут прямо в скрипте в виде переменных (файл /vrotmnenogi-admin/index.php, самый верх). Для еще большей путаницы мы будем добавлять в эту связку секретный ключ (произвольный набор символов), чтобы хакер совсем сломал голову, расшифровывая данный хеш.
Итак, как мы будем проверять вход? Для этого создан файл logintest.php, лежащий прямо в корне админки. Первой строкой в этом файле мы смотрим, не пытается ли пользователь залогиниться? Логин передается в переменной $_POST[‘login’] и если она не пуста, значит – пытается. Соответственно первым ветвлением IF мы проверяем, что он нам такого прислал и сравниваем с хешем строк пароля, логина и секретного ключа:
if ($_POST['login']){
if ($_POST['login'] == $admin_login &&
$_POST['password'] == $admin_password){
setcookie ("admin_login", $protection_combo,
time() + 60*60*24*7);
header ("location: /vrotmnenogi-admin/");
}
}
Если проверка пройдена, то мы устанавливаем куки, в которую и записан этот хеш. Куки ставится на неделю и работает только для каталога /vrotmnenogi-admin/ нашего движка. И потом отправляем заголовок, который переадресовывает нас на главную страницу. То есть – для пользователя не видно, что выполняется какой-то скрипт, все происходит «мгновенно».
Следующий блок в этом файле – это как раз вывод формы ввода логина и пароля. То есть, если не передано поле $_POST[‘login’] и данные в куки не совпадают с хешем (попытка взлома или просто нет куки – не залогинен), то выводится форма входа:
// Проверка, введен ли пароль админа
if ($_COOKIE['admin_login'] != $protection_combo){
?>
<form action="./index.php" method="post">
Логин: <input name="login"><br>
Пароль: <input name="password" type="password"><br>
<input type="submit" value="Зайти на огонек">
</form>
<?php
exit;
}
Кстати, обратите, пожалуйста внимание на то, что после вывода формы обязательно должна быть команда exit. Иначе после формы выведется сама админка. После нажатия кнопки «Войти» все данные как раз и проверяются блоком кода, описанным чуть выше.
Теперь выход. Тут все очень просто. В файле index.php я создал кнопку, при нажатии на которую выполняется скрипт logout.php. Кнопку назвал незатейливо – «Выйти» :)
<form action="./logout.php" method="post">
<input type="submit" value="Выйти">
</form>
Никакого криминала :) Ну и сам скрипт выхода. Он просто убивает куки с хешем логина, пароля и секретного ключа, из-за чего пользователь не пройдет проверку в файле logintest.php:
<?php
setcookie ("admin_login", "");
header ("location: /vrotmnenogi-admin/");
?>
Убиваем куки (передав ей пустое значение) и отправляем пользователя на главную страницу. Вот так.
С админкой на этом все. Следующая статья в этой серии будет, как я и сказал, о постах и о категориях. Удачи!