Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3189

.pdf
Скачиваний:
6
Добавлен:
15.11.2022
Размер:
8.9 Mб
Скачать

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

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

Основными этапами использования сеанса являются следующие:

Запуск сеанса.

Регистрация переменных сеанса.

Использование переменных сеанса.

Отмена регистрации переменных и закрытие сеанса. Заметим, что все перечисленные этапы необязательно могут со­

держаться в одном сценарии, и некоторые из них могут находиться в нескольких сценариях. Рассмотрим каждый из этих этапов после­ довательно.

Запуск сеанса

Прежде чем можно будет воспользоваться функциональными воз­ можностями сеанса, следует запустить сам сеанс. Существует несколько способов сделать это.

Но самый простой заключается в том, что сценарий начинается с вызова функции:

s e s s i o n ________ s t a r t ()

Эта функция проверяет, существует ли идентификатор текущего сеанса. Если нет, она его создает. Если же идентификатор текущего сеанса уже существует, она загружает зарегистрированные переменные сеанса.

Регистрация переменных сеанса

Для того чтобы получить возможность отслеживать переменные от одного сценария к другому, их необходимо зарегистрировать. Это делается путем вызова функции s e s s io n _ r e g is te r () . Например, для регистрации переменной Smyvar применяется следующий код:

$myvar=5 session r e g i s t e r («myvar») .

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

За один прием можно зарегистрировать более одной переменной, пе­ редав разделенный запятыми список имен переменных:

S e s s i o n r e g i s t e r (« m y v a rl» , »myvar2>>) .

Использование переменных сеанса Чтобы сделать переменную сеанса доступной для использова­

ния, сначала необходимо запустить сеанс. После этого появляется доступ к этой переменной. Если включена опция r e g i s - t e r g l o b a l s , то доступ к этой переменной можно получить через сокращенную форму ее имени, например, $myvar. Если же упомяну­ тая опция не включена, получить доступ к переменной можно через ассоциативный массив

$HTTP_SESSION_VARS,

например,

$HTTP_SESSIQN__VARS [« m y v ar» ] .

Проверить, является ли переменная зарегистрированной перемен­ ной сеанса, можно обратившись к функции s e s s io n _ _ is _ r e g is - t e r e d (). Вызов функции выполняется следующим образом:

$ r e s u l t = s e s s i o n _ i s _ r e g i s t e r e d (« m y v ar» ) .

Эта функция проверит, является ли $m yvar зарегистрированной переменной сеанса, и вернет t r u e или f a l s e .

Можно поступить и по-другому — проверить массив $НТТР

__________ SESSION_VARS на предмет наличия в нем переменной.

Отмена регистрации переменных и завершение сеанса После окончания работы с переменной сеанса ее регистрацию мож­

но отменить, воспользовавшись функцией s e s s i o n u n r e g i s t e r () : s e s s i o n ______ u n r e g i s t e r (« m y v ar» )

Подобно функции регистрации эта функция требует указания имени переменной, регистрацию которой необходимо отменить, в виде строки, не включающей символ $. Данная функция за один раз может отменить регистрацию только одной переменной сеанса. Од­ нако для отмены регистрации всех переменных текущего сеанса можно обратиться к s e s s i o n _ u n s e t ()

По завершении сеанса сначала потребуется отменить регистра­ цию всех переменных, а затем вызвать

s e s s i o n _ d e s t r o y ( ) ;

для обнуления идентификатора сеанса.

Пример сеанса

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

Наш пример включает три простых сценария. Первый, i n ­ d ex .p h p , обеспечивает форму для входной регистрации и аутенти­ фикации пользователей веб-сайта. Второй, s e c r e t . p h p , представ­ ляет информацию только для тех пользователей, которые успешно прошли входную регистрацию. Третий, lo g o u t .p h p , реализует вы­ ход пользователя из системы.

Посмотрим на код приложения. Большая часть кода сосредоточена в сценарии index.php. Давайте изучим его более подробно.

<?php

 

s e s s i o n _ s t a r t

();

i f

( i s s e t ( $ u s e rid , $ p a ssw o rd ))

i f

( $ u s e rid &&

$passw ord)

{

i f ($ userid= = «test> > && $passw ord==«test>>)

{

$ v a lid _ u se r = $ u se rid ; s e s s io n _ re g is te r (<<valid_user>>) ;

}

}

?>

<htm l> <body> <?php

i f ( s e s s io n _ is _ _ re g is te re d (<<valid_user>>) )

{

echo «Вы

зарегистрированы в системе как»

$ v a lid u s e r

«<br>«;

echo «<а h r e f = \» lo g o u t .php\»>L og o u t< /a> < b r> « ;

}

e ls e

{

i f ( i s s e t ( $ u s e r id ) )

{

/ /

если п о л ьзо вател ь пытался за р е ги с т р и р о в а ть с я ,

//н о

возни кла ошибка

echo

«Невозможно войти»;

} e ls e

{

/ / если п о льзователь либо не пытался зар еги стр и р о ­

ва т ь с я ,

// либо покинул сайт

echo «Вы не зарегистрированы в си стем е. < br> «;

}

/ /p r o v id e form to lo g in

echo

«<form m ethod= post a c tio n = \» in d e x . p h p \» > « ;

echo

« < ta b le > « ;

echo

«< tr> < td> JIornH : < /td > « ;

echo

«ctdxinput type=text name=useridx/tdx/tr>«;

echo "<trXtd>riaponb:</td>";

echo

« < td x in p u t

type=password n am e= p assw o rd x /td x /tr> « ;

echo

« < tr> < td

co lsp an = 2

a lig n = c e n te r> « ;

echo

«<input type=subm it

v a lu e = \» B o to n \» > < /td x /tr> « ;

echo

« < /ta b le > < /fo rm > « ;

 

}

?>

<br>

<a h re f= « se c re t . рЬр»>Секретная страница</а>

</body>

</html>

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

Работа этого сценария сосредоточена вокруг переменной се­ анса $v a l i d _ u s e r . Основная идея здесь заключается в следующем: если кто-либо успешно прошел процедуру входной регистрации, мы

регистрируем

переменную сеанса с именем $ v a lid _ u s e r , которая

содержит идентификатор пользователя.

Первым

делом в сценарии выполняется вызов s e s s io n

s t a r t () . Эта функция загружает переменную сеанса $ v a lid _ u s e r , если последняя была зарегистрирована.

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

echo «<form method=post action=\>> index. php\»>«; echo «<table>«;

echo <«trXtd>JIornH:</td>«;

echo «ctdxinput type=text name=useridx/td></tr>«; echo «<tr><td>naponb:</td>«;

echo «ctdxinput type=password name=password></tdx/tr>«;

echo «ctrXtd colspan=2 align=center>«; echo «cinput type=submit

value=\»Bo^n\»X/tdX/tr>«; echo «</tablex/form>«;

Когда пользователь нажмет кнопку отправки (Войти), сценарий вы­ зывается заново и вновь все начинается сначала. На этот раз в нашем рас­ поряжении будут имя пользователя и пароль, позволяющие его аутенти­ фицировать (они хранятся в S u s e r id и S passw ord). Если эта пере­ менные установлены, переходим к блоку аутентификации:

i f ( $ u s e rid && $passw ord)

{

i f ($ userid= = «test> > && $ p assw o rd = = « test» )

{

$valid__user = $ u se rid ; s e s s io n _ re g is te r (« v alid _ u se r» );

}

Если выполнилось соответствие заданным логину и паролю, со­ ответствие этой паре, мы регистрируем переменную $valid_user, которая содержит идентификатор для конкретного пользователя. Таким образом, мы знаем, кто вошел в систему и, соответственно, будем его отслеживать.

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

i f (se ssio n _ is _ re g iste re d (<<valid_user>>))

{

echo «Вы зарегистрированы в системе как $valid__user.

«<Ьг>«;

echo «<а h ref= \» lo g o u t .php\»>Log out</a> <br>«;

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

i f ( i s s e t ( $ u s e r i d ) )

{

/ / если

пользователь пытался зареги стри роваться, но

возникла

ошибка

ес!ю»Невозможно войти»; }

Поскольку $valid_user является зарегистрированной перемен­ ной сеанса, ее нельзя перезаписать путем передачи другого значения через URL, например так:

members ________ o n ly p h p ? v a lid _____ u s e r = te s tu s e r

С основным сценарием, похоже, все понятно. А теперь посмотрим на долгожданную секретную страницу.

<?php

sessio n _ _ start () ;

echo «<h2> Эта страница только для зарегистрированных ноль зова-телей</h2 >« ;

/ /

проверить

переменные сеанса

i f

(se ssio n _ _ is _ re g iste red (<<valid__user>>))

{

echo «<р>

Вы зарегистрированы в системе

к а к : $ v a lid _ u s e r . </р>«;

echo «<p><h3>3TO секретная информация. Она доступна только зарегистрированным пользователям. < /h 3 x /p > « ;

}

e ls e

{ echo «<р>Вы не зарегистрированы в системе. </р>«; echo «<р>Страница доступна только зарегистрированным

пользователям. </р>«;

}

echo «<а href= \»index.php\»> H a главную страницу</а>«;

?>

</body> </htm l>

Приведенный выше код очень прост. Все, что он делает, - это за­ пуск сеанса и проверка того, содержит ли текущий сеанс зарегистриро­

ванного

пользователя, с использованием функции sessio n re g is -

te re d _

u se r (). Если пользователь прошел процедуру входной реги­

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

И в завершение рассмотрим сценарий lo g o u t .php, который завер­ шает регистрацию пользователя в системе.

<?

s e s s io n _ _ s ta rt ();

 

$ o ld _ u se r

=

$ v a lid _ u s e r;

 

/ / сохранить

для проверки регистрировался ли

поль­

зо вател ь

 

 

 

$ r e s u l t

=

s e s s io n _ u n r e g is te r (<<valid_user>>);

ses-

sion_destroy ()

 

 

 

?>

 

 

 

<html> <body>

<Ы>Выход из

системы</Ь1>

 

 

 

<?

 

 

 

 

 

 

 

i f

(lem p ty

( $ o ld _ u s e r) )

 

 

 

{

i f

( $ r e s u lt)

был

зарегистрирован,

не покинул

{ //е с л и

пользователь

систему

echo

«Вы вышли из системы. <t>r>«;

 

}

 

 

 

 

 

 

 

 

e ls e

если

пользователь

был зарегистрирован

 

{

/ /

 

/ /

и не может покинуть систему

 

echo

«Невозможно выйти. <br>«;

 

 

}

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

e ls e

 

 

 

 

 

 

{

/ /

если

пользователь

не

был

зарегистрирован,

 

/

/ но как -то попал

на

эту

страницу

 

echo «Вы не входили в

систему, поэтому не

можете вый­

ти. <br>«;

 

 

 

 

 

 

}

?>

<а href=«index.php»>H a главную страницу</а> </body>

</htm l>

Мы запускаем сеанс, запоминаем старое имя пользователя, отме­ няем регистрацию переменной $ v a lid _ u s e r и завершаем сеанс. По­ сле этого мы выдаем пользователю одно из следующих сообщений: он вышел из системы, не может выйти из системы, поскольку первона­ чально даже не зарегистрировался.

Приведенный выше набор простых сценариев служит основой для многих проектов.

Порядок выполнения работы

1.Изучить принципы аутентификации пользователей в веб­ системах.

2.Реализовать систему аутентификации с помощью РНР-сеансов.

Содержание отчета:

1)титульный лист;

2)формулировка цели работы;

3)описание результатов выполнения;

4)выводы, согласованные с целью работы.

14. ИССЛЕДОВАНИЕ МОДЕЛЕЙ ЗАЩИТ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ. СРЕДСТВА ДИНАМИЧЕСКОГО ИЗУЧЕНИЯ ПО. ОТЛАДКА

ПРОГРАММ И НЕЙТРАЛИЗАЦИЯ ЗАЩИТ В ОТЛАДЧИКЕ SOFTICE

Цели работы:

-познакомиться с методами реализации обратного проектиро­

вания;

-научиться работать с отладчиками, функционирующими под ОС Windows;

-познакомиться с приемами нейтрализации защитных меха­ низмов ПО.

Сведения из теории

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

Под обратным проектированием (reverse engineering) понимают процесс исследования и анализа машинного кода, нацеленный на по­ нимание общих механизмов функционирования программы, а также на его перевод на более высокий уровень абстракции (более высокий уровень языка программирования) вплоть до восстановления текста программы на исходном языке программирования.

Основными методами обратного проектирования являются от­ ладка и дизассемблирование программ.

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

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

Из всех существующих для Windows-платформ отладчиков наибольшей популярностью пользуется отладчик Softlce фирмы «Numega». Большим его преимуществом является то, что Softlce ра­ ботает в 0-м кольце защиты. Обычно ОС имеет права полного досту­ па ко всем остальным выполняемым программам, так как она рабо­ тает в 0-м кольце (наиболее привилегированном), а приложения - в 3-м (наименее привилегированном). Частично осуществлять управ­ ление запущенными приложениями можно из 1-го и 2-го кольца за­ щиты, именно так работает большинство отладчиков из крупных па­ кетов для разработки программ. Разработчики из «Numega» подошли к делу более профессионально и создали Softlce - отладчик, который работает в 0-м кольце защиты (для этого он загружается до загрузки ядра ОС Windows) и позволяет полностью контролировать не только все выполняемые системой задачи, но и саму ОС Windows.

Очень важной особенностью Softlce является то, что он позволяет

перехватывать точки вызова

программой API

функций Windows.

На вызове данных функций

основана работа

всех приложений

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

Основы работы с Softlce

Softlce запускается в любое время при работе ОС с помощью комбинации клавиш Ctrl+D. Выход из отладчика осуществляется по функциональной клавише F5.

Отладчик содержит следующие окна (рисунок):

1.Окно регистров. Включается и выключается по команде wr.

Вданном окне отображается содержимое регистров процессора.

2.Окно данных (располагается под окном регистров). В данном окне отображается содержимое участка памяти в шестнадцатеричном и текстовом виде с заданного адреса. В данном окне можно вывести

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]