Пожалуйста, заполните ваше имя Ваше имя:
Нужен ваш телефон Ваш email или телефон:
Введите текст задания Ваше задание на сайт:

Galleo (главная страница) :: Статьи :: WEB-приложения, ВЕБ-приложения , Web-application :: Основы анализирования алгоритмов работы веб-приложений

Основы анализирования алгоритмов работы веб-приложений

  

Увеличить шрифт  Уменьшить шрифт

Я решил написать что-то типа примера,как нужно анализировать алгоритм работы.Данном случае это шифрование значения сессии в cookie...
Основы анализирования алгоритмов работы веб-приложений [Глава первая:Охота на ведьм]
Для начала я сразу же помянул "плохим" словом разработчиков phpBB,это прибавило боегого духа так сказать =)
Первое что надо сделать,из активных телодвижений это просмотреть исходник.Так как раньше я не имел дела с phpBB,структура форума мне не была знакома(что куда обращается и прочее)
Определимся с названиями файлов,так ключевые слова будут "шифрование","сессия(session)","cookie","serialize","unserialize".Многие наверняка зададут вопрос "Откуда взялись последнии ключевые слова?!?" Ответ: да оттуда =)
Если вы знакомы с веб програмиированием хотябы отдаленно,то наверняка должны знать,что в куках нельзя хранить объекты,массивы и тп.Поэтому разработчики пхп придумали эти две функции,преобразующие
объект(а в данном случае это будет массив) в строку,определенного формата,вторая функция осуществляет обратные преобразования.Ну вопщем тут все понятно.Что бы не использовать поиск по файлам в любимом PSPad'e (txt редактор,имеющий широкие возможности,написан на Delphi)
Я решил презадуматься,развить мышление так сказать.
Наш алгоритм действий будет такой:
1)Пройдемся по файлам лежащим в папке,но не по всем а только по тем,которые для нас интересны
2)Пройдемся по поддиректориям.(заходим в папку идем на пункт 1.)
Вот вы подумайте,сессия должна ставится при login'e значит возможно будет в файле login.php, или index.php Ничего похожего я не нашел в этих файлах,
зашел в папочку "/includes/" под мой запрос подошли файлы auth.php,functions.php("наверняка тут основные функции"-,подумал я тогда),sessions.php.В первых двух мало чего интересного, а в sessions.php находилось именно то что я ожидал...
[Глава вторая:Засада]
Несмотря на то ,что я нашел файл отвечающий за сессии,мне не хватало информации.Пришлось готовится к засаде...
Для начала я поискал в других исходниках значение непонятных мне переменных(это мы уже научились делать в главе 1)
После того как этот "клубок" связей между файлов,начал раскручиваться,мы должны собрать больше информации.
Поставив форум на локалхост,я зашел залогинелся.
Смотрим что мне удалось подсмотреть.
При заходе и автологине:
URL:
(http://localhost/phpbb2/index.php?s...d64b86326f89812)
Tables:
Код:
+-------Содержание_таблицы_"phpbb_sessions_keys"-------------+ |key_id |user_id|last_ip |last_login| |47890667360dafa661c2c001881fcd8c| 2|7f000001|1133880510| +------------------------------------------------------------+ +-----Содержание_таблицы_"phpbb_sessions"-------------------------------------------------------------------------------------------+ |session_id |session_user_id|session_start|session_time|sessio n_ip|session_page|session_logged_in|session_admin| |8b65afab026290d77d64b86326f89812| 2| 1133880510| 1133880510| 7f000001| 0| 1| 0| +-----------------------------------------------------------------------------------------------------------------------------------+

Cookie:
Код:
+----------phpbb2mysql_data-------------------------------------------------------------+ |a:2:{s:11:"autologinid";s:33:"11328591534395a4beaa2249.79604364";s:6:"userid";s:1:"2";}| +---------------------------------------------------------------------------------------+ +--------phpbb2mysql_sid---------+ |8b65afab026290d77d64b86326f89812| +--------------------------------+

То есть cookie phpbb2mysql_data содержит строку, в которой "свернут"
массив.Для тех кто не понял напишу:
ключ массива: autologinid значение: 11328591534395a4beaa2249.79604364
ключ массива: userid значение:2
[Глава 3: Наш ход]
Теперь когда у нас есть все что бы анализировать ситуацию,мы можем глянуть опять в исходник.
Незнаю почему, но я все время сначала гляжу на функции удаления(session_clean),мне это помогает сначала,представить что выполняет функция добавления(session_begin)
Подчерпнул кое-что о автологине,и о назначении таблиц.Далее я поглядел конечто на функцию session_begin,посмотря на sql запрос многое понимаешь...
[Глава 4: Родственные связи...]
"Вот оно!",-так и хотелось закричать мне когда моя теория подтвердилась.
Смотрим главу вторую,а именно сведения которые мы подчерпнули:
autologinid=11328591534395a4beaa2249.79604364
Из исходника следует что key_id=md5(autologinid)!
Проверил,и вправду все верно! Вот тебе и первая связь!
Связь конечно это хорошо,даже очень хорошо. Но вот что не вписывалось:
mt_srand((float) $sec + ((float) $usec * 100000));
$session_id = md5(uniqid(mt_rand(), true));
/*Далее*/
list($sec, $usec) = explode(' ', microtime());
mt_srand(hexdec(substr($session_id, 0, 8)) + (float) $sec + ((float) $usec * 1000000));
$auto_login_key = uniqid(mt_rand(), true);
В этой строке индификатору сессии,которая будет записана в таблицу phpbb_sessions,присваевается неповторяющийся md5 хеш,никак не связанный с key_id.
Но постойте,этот хеш равен куке phpbb2mysql_sid и равен переменной sid в урле после процедуры логина! Но как бы это связать с хешем пароля??
[Глава 5: Исход битвы]
Ответ-никак =)
Вопщем этой "статьёй" я хотел показать пример анализирования алгоритма работы большого веб приложения,
думаю это мне удалось,остальное не главное для этой "статьи".

https://forum.antichat.ru
Добавить в закладки: 

Веб-приложения: от идеи до запускаВеб-приложения: от идеи до запуска
Подумываешь о запуске веб-приложения? Ниже представлены 10 шагов, которые помогут тебе пройти путь от идеи до запуска. ... Читать дальше...
Вывод сообщений пользователю в веб-приложенияхВывод сообщений пользователю в веб-приложениях
Вывод сообщений пользователю — довольно распространенное действие, которое должно выполнять веб-приложение. Оно может пр... Читать дальше...
Приемы безопасного программирования веб-приложений на PHPПриемы безопасного программирования веб-приложений на PHP
Данная статья не претендует на роль всеобъемлющего руководства на тему "как сделать так, чтоб меня никто не поломал". Та... Читать дальше...
Веб-приложения - это будущее, от операционных систем до самого ВебаВеб-приложения - это будущее, от операционных систем до самого Веба
Веб-приложения наконец-то начинают пробиваться к свету. Я ставлю все свое состояние на это. Я уверен, что веб-приложения... Читать дальше...
Скупка картриджей как сервис для системных администраторов

Скупка картриджей как сервис для системных администраторов
... Читать дальше...
Сделать сайт самостоятельно или заказать готовый?

Сделать сайт самостоятельно или заказать готовый?
... Читать дальше...
Федор Иванович Лидваль. Часть 7

Федор Иванович Лидваль. Часть 7
... Читать дальше...
Ваш комментарий к данной статье:
Жирный шрифт Курсив Подчеркнуть Выровнять влево Выровнять по центру Выровнять вправо Выровнять по ширине Вырезать Копировать Вставить Отменить Повторить Список Нумерованный список Верхний индекс Нижний индекс Вставить ссылку  Цвет:
Инфо от наших друзей:




Наши партнёры: