Использование сессий в языке PHP

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

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 26.05.2013
Размер файла 28,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Федеральное Государственное бюджетное образовательное учреждение высшего профессионального образования

Пермская государственная сельскохозяйственная академия имени академика Д.Н. Прянишникова

Кафедра ИТАП

Контрольная работа

по дисциплине: "Сетевые информационные системы"

Выполнил студент 4 курса

факультета заочного обучения

специальности "Информационные системы и технологии":

Сычев Роман Юрьевич

Проверил: ассистент кафедры ИТАП

Санников Павел Ильич

Пермь-2013

Содержание

  • Введение
  • 1. Сессии в PHP
  • 2. Как работать с сессиями?
  • 3. Примеры
  • 4. Безопасность
  • Итоги
  • Список используемых источников

Введение

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

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

1. Сессии в PHP

В разнообразных конференциях, посвященных программированию меня в первую очередь всегда интересуют такие разделы, как "Web-программирование" и "Скрипты". По большей части, вопросы о PHP в таких форумах довольно простые, требующие лишь общего понимания PHP, тем не менее, самый часто задаваемый вопрос по моим наблюдениям, это: "Что такое сессии в PHP и с чем/как их можно кушать?". Хотелось бы разъяснить этот вопрос раз и навсегда.

С самого начала PHP все приняли на ура, но как только на этом языке стали создавать достаточно крупные проекты, разработчики столкнулись с новой проблемой - в PHP отсутствовало понятие глобальных переменных! То есть, выполнялся некий скрипт, посылал сгенерированную страницу клиенту, и все ресурсы, используемые этим скриптом уничтожались. Попробую проиллюстрировать: предположим есть две страницы одного сайта, index. php и dothings. php. Исходники к этим страницам выглядят так:

index. php -

<? php

$a = "Меня задали на index. php";

? >

<html><body>

<? php

echo $a;

? >

</body></html>

dothings. php -

<html><body>

<? php

echo $a;

? >

</body></html>

Если выполнить эти два скрипта, то на первой странице мы увидим надпись "Меня задали на index. php", а вторая страница будет пустой.

Разработчики web-сайтов, недолго думая, стали использовать cookie для хранения глобальных переменных на стороне клиента. Процесс выглядел примерно так: пользователь приходит на главную страницу сайта, делает какие-то действия, и вся информация, связанная с этим пользователем, которая может потребоваться на других страницах сайта, будет храниться у него в браузере в виде cookie. Этот метод меет довольно серьезные минусы, из-за которых от PHP в своё время отвернулось немало разработчиков. Например, нам нужно авторизовать пользователя, чтобы разрешить ему доступ к закрытым (или принадлежащим только ему) разделам сайта. Придёться <кидать> пользователю cookie, который будет служит его последующим идентификатором на сайте. Такой подход становится очень громоздким и не удобным, как только сайт начинает собирать всё больше и больше сведений о поведении пользователя, ведь всю информацию, посылаемую пользователю, желательно кодировать, чтобы её нельзя было подделать. Ещё совсем недавно подделкой cookie можно было <повалить> не один чат, а порой и пробраться в чужую почту. К тому же есть ещё на свете странные люди, у которых браузер cookie не поддерживает.

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

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

2. Как работать с сессиями?

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

"Warning: open (/var/state/php/sess_6f71d1dbb52fa88481e752af7f384db0, O_RDWR) failed: No such file or directory (2)".

Это значит всего лишь, что у вас неправильно настроен PHP. Решить эту проблему можно, прописав правильный путь (на существующую директорию) для сохранения сессий в файле php. ini и перезапустить сервер.

Любой скрипт, который будет использовать переменные (данные) из сессий, должен содержать следующую строчку: session_start ();

Эта команда говорит серверу, что данная страница нуждается во всех переменных, которые связаны с данным пользователем (браузером). Сервер берёт эти переменные (из файла, либо из БД) и делает их доступными. Очень важно открыть сессию до того, как какие-либо данные будут посылаться пользователю; на практике это значит, что функцию session_start () желательно вызывать в самом начале страницы, например так:

<? php

session_start ();

? >

<html>

<head>

</head>

После начала сессии можно задавать глобальные переменные. Это элементарно: вызываем функцию session_register ('var_name'); и переменная $var_name становится доступной на всех страницах, использующих сессию. Для примера поковыряем программку, приведенную в начале статьи:

index. php -

<? php

// открываем сессию

session_start ();

// задаём значение переменной

$a = "Меня задали на index. php";

// регистрируем переменную с открытой сессией

// важно: названия переменных передаются функции session_register ()

// без знака $

session_register ("a");

? >

<html>

<body>

Всё ОК. Сессию загрузили!

Пройдём, посмотрим что <a href="dothings. php>там: </a>

</body>

</html>

dothings. php -

<? php

// открываем сессию

session_start ();

? >

<html>

<body>

<? php

echo $a;

? >

</body>

</html>

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

Всё ОК. Сессию загрузили! Пройдём, посмотрим что там:

А второй (dothings. php) вот это:

Меня задали на index. php

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

Другие полезные функции для работы с сессиями:

session_unregister (string) - сессия <забывает> значение заданной глобальной переменной;

session_destroy () - сессия уничтожается (например, если пользователь покинул систему, нажав кнопку <выход>);

session_set_cookie_params (int lifetime [, string path [, string domain]]) - с помощью этой функции можно установить, как долго будет <жить> сессия, задав unix_timestampопределяющий время <смерти> сессии. По умолчанию, сессия <живёт> до тех пор, пока клиент не закроет окно браузера.

3. Примеры

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

Авторизация Пользователя

Вопросы по авторизации пользователей с помощью PHP-сессий постоянно задаются в конференциях по web-программированию.

Механизм авторизации пользователей в системе с помощью сессий довольно хорош с точки зрения безопасности (см. раздел <Безопасность> ниже).

Наш пример будет состоять из трёх файлов: index. php, authorize. php и secretplace. php. Файл index. php содержит форму, где пользователь введёт свой логин и пароль. Эта форма передаст данные файлу authorize. php, который в случае успешной авторизации допустит пользователя к файлу secretplace. php, а в противном случае выдаст сообщение об ошибке.

Приступим: - index. php -

<html>

<head>

<title>Введи пароль, смертный</title>

</head>

<body>

<form action="authorize. php" method="post">

Логин: <input type="text" name="user_name"><br>

Пароль: <input type="password" name="user_pass"><br>

<input type="submit" name="Submit">

</form>

</body>

</html>

authorize. php -

<? php

// открываем сессию

session_start ();

// данные были отправлены формой?

if ($Submit) {

// проверяем данные на правильность. в данном случае я

// вписал имя пользователя и пароль прямо в код, целесообразней

// было бы проверить логин/пароль в базе данных и при сов-

// падении дать доступ пользователю.

if ( ($user_name=="cleo") && ($user_pass=="password")) {

$logged_user = $user_name;

// запоминаем имя пользователя

session_register ("logged_user");

// и переправляем его на <секретную> страницу.

header ("Location: secretplace. php");

exit;

}

}

// если что-то было не так, то пользователь получит сообщение об ошибке.

? >

<html><body>

Вы ввели неверный пароль!

</body></html>

secretplace. php -

<? php

// открываем сессию

session_start ();

/*

Просто зайти на эту страницу нельзя. Если имя пользователя не зарегистрировано, то перенаправляем его на страницу index. php для ввода логина и пароля. тут на самом деле можно много чего сделать, например запомнить IP пользователя, и после третьей попытки получить доступ к файлам, его закрыть.

*/

if (! isset ($logged_user)) {

header ("Location: index. php");

exit;

}

? >

<html>

<body>

Привет, <? php echo $logged_user;? >, ты на секретной странице!!!:)

</body>

</html>

4. Безопасность

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

на компьютере пользователя стоит <троян>, который ворует номера сессий;

сессия язык программирование идентификатор

злоумышленник отлавливает трафик между компьютером пользователя и сервером. Конечно, есть защищенный (зашифрованный) протокол SSL, но им пользуются не все;

к компьютеру нашего пользователя подошел сосед и стащил номер сессии.

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

Впрочем, PHP очень часто можно <обмануть>. Давайте рассмотрим возможные точки взлома в программе авторизации пользователя:

Файл authorize. php - попытка подбора пароля с помощью стороннего скрипта;

Файл secretplace. php - попытка обмануть программу путём вписывания значений переменной $logged_user в адресной строке браузера, например так:

http://www.yoursite.ru/secretplace. php? logged_user=hacker

Итак, в нашей программе явно видны две <дыры>, одна маленькая и не особо заметная, а вот вторая - просто огромная, через которую большинство хакеров и лезет туда, куда не надо.

Как <залатать> дыру номер 1?

Не будем писать тонны кода по блокировке IP-адреса и т.п., а просто проверим, откуда приходит запрос, а точнее с какой страницы пришёл запрос, если это будет любая страница с нашего сайта, то всё нормально, а во всех остальных случаях пускать не будем. Подкорректируем файл authorize. php:

authorize. php V2 -

<? php

// открываем сессию

session_start ();

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

$SERVER_ROOT = "http://localhost/test1/";

// если пользователь пришёл с любой страницы нашего сайта

// то он вроде наш.

// Переменная $HTTP_REFERER всегда доступна по умолчанию

// и содержит полный адрес ссылающейся страницы.

// функция eregi () проверяет, начинается ли адрес ссылающейся страницы

// со значения в переменной $SERVER_ROOT

if (eregi ("^$SERVER_ROOT",$HTTP_REFERER)) {

// данные были отправлены формой?

if ($Submit) {

// далее все как раньше

if ( ($user_name=="cleo") && ($user_pass=="password")) {

$logged_user = $user_name;

// запоминаем имя пользователя

session_register ("logged_user");

// и переправляем его на <секретную> страницу.

header ("Location: secretplace. php");

exit;

}}}

? >

<html><body>

Вы ввели неверный пароль!

</body></html>

Как избавиться от <дыры> номер 2?

Предположим, у вас есть сайт, где каждый смертный может зарегистрироваться чтобы добавлять сообщения в форум. Естественно, в форуме у некоторых пользователей (админов, модераторов), возможностей больше чем у других, они, например, могут удалять сообщения других пользователей. Уровень доступа пользователя вы храните в сессии, в переменной $user_status, где $user_status = 10 соответствует полному доступу к системе. Пришедшему на сайт злоумышленнику достаточно зарегистрироваться штатным образом, а потом дописать в адресной строке браузера? user_status=10. Вот и завёлся у вас на форуме новый админ!

В принципе, любую переменную скрипта можно задать через адресную строку, просто дописав после полного адреса к скрипту вопросительный знак и название переменной с её значением. Давайте поправим наш код, чтобы этого избежать:

secretplace. php V2 -

<? php

// убираем всё лишнее из адресной строки

// функция unset () <освобождает> переменную

unset ($logged_user);

// открываем сессию

session_start ();

// и корректируем испорченные перменные.

// Важно: в этом случае, переменная регистрируется не как новая

// переменная, а как уже существующая, а потому знак $ не опускается

session_register ($logged_user);

/*

Просто зайти на эту страницу нельзя. Если имя пользователя не зарегистрировано, то перенаправляем его на страницу index. Php для ввода логина и пароля. тут на самом деле можно много чего сделать, например запомнить IP пользователя, и после третьей попытки получить доступ к файлам, его перекрыть.

*/

if (! isset ($logged_user)) {

header ("Location: index. php");

exit;

}

? >

<html>

<body>

Привет, <? php echo $logged_user;? >, ты на секретной странице!!!:)

</body>

</html>

Итоги

Механизм сессий - довольно удачная особенность языка PHP. Сессии росты, очень гибки в использовании. Кстати, есть одна, мало где документированная возможность сессий PHP (доступна начиная с версии 4.0.3) - в сессиях можно хранить не только переменные, но и объекты.

Добавление от 14.12.2001

С выходом в свет PHP 4.1.0 - работа с сессиями значительно облегчилась. Все переменные сессий стали доступны из глобального массива _SESSION ['var_name']. Самое приятное наверное в том, что при присвоении какого-либо значения любому полю массива, переменная с таким же именем автоматически регистрируется, как переменная сессии, на пр:

<?

$_SESSION ['counter'] = 12;

echo $counter;

? >

выведет на экран броузера число 12.

Список используемых источников

1. Мэтт Зандстра/ PHP. Объекты, шаблоны и методики программирования/ Мэтт Зандстра [Переводчик: С. Тригуб] - М.: Вильямс, 2006 г.

2. Учебники и справочники по языку PHP: Режим доступа: http://www.php. su/books/? php/.

3. What is PHP: Режим доступа: http://php.net

Размещено на Allbest.ru

...

Подобные документы

  • Сущность языка программирования, идентификатора, структуры данных. Хранение информации, алгоритмы их обработки и особенности запоминающих устройств. Классификация структур данных и алгоритмов. Операции над структурами данных и технология программирования.

    контрольная работа [19,6 K], добавлен 11.12.2011

  • Критерии классификации баз данных. Использование C++ - компилируемого, статически типизированного языка программирования общего назначения. Этапы разработки специализированного прикладного программного обеспечения - базы данных "Прохождение практики".

    курсовая работа [1,4 M], добавлен 11.12.2015

  • Описание формата и структуры входных и выходных файлов. Выбор языка программирования и Perl модуля для генерации документов в формате pdf. Валидация почтового адреса. Процесс создания алгоритма обработки данных. Структура штрихкодового идентификатора.

    дипломная работа [1,6 M], добавлен 04.11.2015

  • Создание информационной системы управления базой данных "Кадровое агентство". Характеристика используемой ЭВМ, ОС, языка программирования. Требования предъявляемые к ПО. Алгоритмы и тексты форм ввода. Описание, алгоритмы формирования выходных документов.

    курсовая работа [1,1 M], добавлен 07.01.2013

  • Анализ затрат и прибыли. Создание программного проекта для решения задачи о прибыли и убытках на языке программирования C#. Использование функций и переменных, компиляция программы. Алгоритмы и структуры данных. Тестирование программного обеспечения.

    курсовая работа [1,2 M], добавлен 03.01.2015

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

    презентация [192,3 K], добавлен 13.06.2014

  • Хеширование как процесс получения уникального (чаще цифрового) идентификатора для объекта, его применение для быстрого поиска в структурах данных и криптографии, проверки на наличия ошибок. Примеры хеш-функций. Разрешение коллизий, метод цепочек.

    реферат [214,8 K], добавлен 20.10.2013

  • Использование в операционной системе UNIX языка программирования СИ. Требования к квалификации программиста. Механизм ветвления по условиям, циклы, составные инструкции. Особенности языка СИ. Доступ к памяти компьютера через использование указателей.

    презентация [108,6 K], добавлен 22.05.2015

  • Алгоритмы, алфавит языка, структура программы, написанной на Турбо Паскале. Целые, вещественные, логические, символьные типы данных, их совместимость. Линейные алгоритмы, пустой и составной операторы, простейший ввод и вывод, разветвляющиеся алгоритмы.

    курсовая работа [49,8 K], добавлен 03.11.2009

  • Применение информационных технологий в конкретной практической деятельности по выбранной специальности. Использование языка программирования Pascal в инженерной практике как универсального алгоритмического языка. Программа решения задачи на языке Pascal.

    курсовая работа [1,3 M], добавлен 25.07.2012

  • Изучение основных методов и алгоритмов криптографии с открытым ключом и их практического использования. Анализ и практическое применение алгоритмов криптографии с открытым ключом: шифрование данных, конфиденциальность, генерация и управление ключами.

    дипломная работа [1,2 M], добавлен 20.06.2011

  • Алгоритмы и алфавит языка Турбо Паскаль. Основные типы данных. Операторы присваивания, перехода и выбора. Понятие массива в Паскале. Особенности работы со строками в программе. Использование линейного поиска и поиска с барьером. Основные виды сортировок.

    учебное пособие [53,2 K], добавлен 09.11.2009

  • Понятие математического программирования. Класс как тип структуры, позволяющий включать в описание типа не только элементы данных, но и функции. Рассмотрение основных особенности языка программирования C++. Характеристика среды MS Visual Studio 2008.

    контрольная работа [318,0 K], добавлен 13.01.2013

  • Особенности программирования на языке Паскаль в среде Турбо Паскаль. Линейные алгоритмы, процедуры и функции. Структура данных: массивы, строки, записи. Модульное программирование, прямая и косвенная рекурсия. Бинарный поиск, организация списков.

    отчет по практике [913,8 K], добавлен 21.07.2012

  • Алфавит языка программирования C#. Лексемы языка программирования. Область действия переменных. Понятие классов и объектов. Структура программного модуля на С#. Управление процессом повторения вычислений. Продолжение цикла и модификация параметра цикла.

    курсовая работа [557,1 K], добавлен 10.03.2014

  • Векторная компьютерная графика. Графические примитивы. Графические возможности языка программирования Pascal. Методические рекомендации к изучению графики в языке программирования Pascal. Построение графиков функций.

    курсовая работа [28,3 K], добавлен 13.06.2007

  • Сравнительная характеристика, возможности и функции языков программирования JavaScript и PHP. Основные области их использования. Разработка интерактивного Web-приложения с применением JavaScript на примере теста по теме "Программирование на языке Delphi".

    курсовая работа [19,3 K], добавлен 01.07.2014

  • Понятие информационной безопасности. История развития криптографии. Функции информационных моделей. Переменные, используемые при разработке прикладной программы для шифрования и дешифрования сообщений с помощью шифра Цезаря. Блок-схема общего алгоритма.

    курсовая работа [975,5 K], добавлен 11.06.2014

  • История происхождения языков Веб-программирования. Исторические факты появления самого первого из них. Сущность современного, актуального в настоящее время, языка HTML, история появления языка PHP, применение языка JavaScript и его использование.

    реферат [23,1 K], добавлен 23.02.2013

  • Хеширование как метод обеспечения быстрого доступа к большим объемам информации. Добавление в хеш-таблицу новой пары. Операции поиска, вставки и удаления по ключу. Практическое применение в теории баз данных, кодировании, банковском деле, криптографии.

    презентация [212,2 K], добавлен 22.10.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.