Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программируем на PHP - вопросы и ответы.


Информационный Канал Subscribe.Ru

Здравствуйте! Выпуск номер 73
рассылки сайта РНР для всех!

Форум сайта / Сайт автора

Важная информация:

  • Сайт, который представляет всю информацию о нужном для вас хостинге - http://bel-host.info (от 5 у.е. за год включая панель управления + все, что необходимо для работы сайта + поддержка, все кроме места и трафика неограничено!). Регистрация доменов по низким ценам.

  • Если вас интересует возможность быстрой разработки скриптов и приложений для сети Интернет под ваши нужды, или вам необходима помощь специалиста в поддержке и развитии собственных систем (сайтов, страничек и т.д.), пишите на адрес: virtualphp@tut.by - с темой "разработка".

  • По поводу размещения информации в этой рассылке обращайтесь на адрес: virtualphp@tut.by

Рассылка: PHP WARS: против целого мира.

Рассылки Subscribe.Ru
PHP Wars: против целого мира

В каждом выпуске рассыки:

  • Уникальная авторская статья

  • Обзор нового ПО

  • Интернет байки

  • Ссылки на электоронные книги

Сайт поддержки: http://phpwars.net

Предохраняйся с помощью сессий.

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

На первой странице (index.php) делаем форму для ввода данных:

<form method=post action="index2.php">
<table align="center" cellspacing="2" cellpadding="2" border="0" width="320">
<tr>
     <td width="100">Имя:</td>
    <td width="200"><input type="text" name="name"<</td>
</tr>
<tr>
    <td width="100">Пароль:</td>
    <td width="200"><input type="password" name="pass"></td>
</tr>
<tr>
    <td colspan="2" width="300">
 <center>
  <INPUT TYPE="submit" value="Вход">  <INPUT TYPE="reset" value="Сбросить">
 </center>
</td>
</tr>
</table>
</FORM>

Думаю здесь пояснять ничего не нужно. Идем дальше: Сначала краткое пояснение. Мы создаем функцию проверки пользователя check(). У нас есть база данных my_site, содержащая поля id, name и pass, где name и pass - логин и пароль пользователя соответственно. Функция пропускает только тех, кто указал верный логин и пароль в форме ($name, $pass) на входе, потом эти переменные сохраняются в сессию, следовательно, пока сессия жива пользователь может заходить на ваш сайт без авторизации. Даже указав другой верный логин и пароль, он будет авторизирован под указанным ранее логином.

Предполагается, что соединение с базой mysql уже произведено и база данных выбрана.

<?
Function check()
{
if (empty($pass)||empty($name))
error("Не указан логин или пароль");
$sql="select * from my_site where login='".$name."'";
if ($show=mysql_query($sql))
 {
 $a=mysql_fetch_array($show);
 if ($a['pass']!=$pass)
 error("Не верное сочетание логин - пароль");
 else
 session_register("name","pass");
 }
else
error("Ошибка запроса к базе данных");
}
?>

Начнем пояснения с первой строки. if (empty($pass)||empty($name))
Проверяем задан ли пароль и логин. Если одно из полей пустое, то
error("Не указан логин или пароль"); Здесь error - это любая функция вывода ошибки.
В следующей статье я подробно затрону эту тему (вывод ошибки, запись ее в лог, отправка отчета об ошибке и т.д.), а пока мы можем обойтись простой функцией:

<?
function error($er)
{
echo $er;
exit(0);
}
?>

Если поля не пусты, то скрипт продолжает работу.
$sql="select pass from mysite where login='".$name."'";
Пишем запрос к базе mysql, который вернет нам значение поля pass, строки, где login=$name.
if ($show=mysql_query($sql))
Если запрос обработан без ошибок, то
$a=mysql_fetch_array($show);
Присваиваем переменной (ассоциативный массив) значение поля pass
if ($a['pass']!=$pass)
error("Не верное сочетание логин - пароль");
Если поле pass не соответствует тому, что ввел пользователь или тому, что хранится в сессии, то мы опять через функцию error выводим ему ошибку.
else
session_register("name","pass");
Иначе записываем переменные $name и $pass в сессию и продолжаем выполнять скрипт.
}
else
error("Ошибка запроса к базе данных");
}
?>
Если есть ошибка в запросе к базе mysql, то мы опять же выводим ошибку пользователю.

Итак, вначале каждой страницы, к которой нужно запретить доступ посторонним пишем:

<?
session_start();
// эта функция открывающая или продолжающая работу с сессиями. Она должна 
//быть задана в самом начале страницы до отправки заголовка страницы.
check();
//наша функция проверки.
?>

Теперь проверим логику скрипта. Если человек не заполняет одно из полей и нажимает кнопку "вход", то перейдя на страницу index2.php он получит надпись "Ошибка: Не указан логин или пароль".

Если он указывает неверный логин или пароль, то ему выпадает "Ошибка: Не верное сочетание логин - пароль".

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

Возможные проблемы:

  • Нельзя заходить на сайт под разными именами.
  • Если человек раз зашел на сайт, то с его компьютера можно посещать этот сайт еще в течении некоторого времени (пока жива сессия), что не очень хорошо, если ты работаешь из Интернет салона.
  • Решение этих проблем будет описано в следующих статьях. Также будут затронуты вопросы: система обнаружения атак и попыток подбора пароля, с отправкой отчета по почте, функция вывода ошибок, с записью в лог файл.

До скорых встреч…

Наши проекты

http://virtual.brest.by - Виртуальный Брест. Региональный информационно - развлекательный портал города Бреста. Чат, форум, статьи, услуги, объявления, недвижимость, каталог сайтов - это и многое другое ждет Вас на страницах сайта.
http://bel-host.info - хостинг по самым маленьким ценам - от 5 у.е. за 1 год! Ограничены только место и трафик, все остальное в любых количествах!
http://204040.com - Интернет-магазин компьютерного салона Успех г. Брест

автор рассылки Андрей Кухарчик / http://php.virtualbrest.com


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: inet.webbuild.php3programm
Отписаться

В избранное