Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #75, МАРТ 2005 г.

Азартные игры на PHP

Никита Кислицин

Хакер, номер #075, стр. 075-118-3


loadVariables("http://xa-xoct.ru/login.php?login=nikitos&pass=GytFbDf", "_root");

На самом деле, здесь функция loadVariablers выполняет двоякую роль. С одной стороны она отправляет скрипту 2 переменные, а с другой – загружает идентификаторы, которые находятся в выводе сценария login.php.

Упрощенный вариант сценария login.php

function auth($login, $pass) {

$re=mysql_query(select password from users where login=’$login’);

$res=mysql_fetch_array($re);

if(mysql_num_rows($re)==0 || $pass!=$res[password]) return false;

return true;

}

if(auth($_GET[login],$_GET[pass])) {

echo “result=1&sid=$session”;

} else {

echo “result=0”;

}

Здесь, как несложно видеть, описана простейшая функция auth, проверяющая корректность аутентификационных данных. Интереснее ниже – в случае успеха мы выводим в стандартный поток вывода строку result=1&sid=$session. Здесь следует пояснить, что как раз эта строка попадает на вход флэшовой функции loadVariables, и именно из нее будут извлечены и импортированы переменные result и sid. Первая указывает на то, удалась ли аутентификация, а вторая является идентификатором php-сессии, в пространстве переменных которой мы будем хранить секретные сведения, чтобы не передавать их каждый раз. Все дальнейшие транзакции будут осуществляться через этот идентификатор.

После того, как аутентификация пройдена, флэш-приложение показывает пользователю примитивный игровой стол, представляющий собой прямоугольник, расчерченный на 36 клеток с кнопкой “крутить”. Обработчик этой кнопки почти копирует уже приведенный вызов функции loadVariables: на этот раз методом POST отправляются идентификатор сессии и все пары <номер_поля, ставка>, где ставка – не ноль.

Сначала я подумал, что можно отправлять все ставки в виде кучи переменных, однако затем решил лучше структурировать весь обмен, отправляя информацию о ставках в формате xml-документа. Таким образом, скрипту передаются только лишь 3 параметра: идентификатор пользовательской сессии, параметр action и xml-документ, несущий информацию о ставках пользователя. Этот документ имеет следующий формат:

<bet>

<pole>

<code>23</code>

<money>4</money>

</pole>

<pole>

<code>50</code>

<money>100</money>

</pole>

</bet>

Мы уже обсуждали формат XML, и я надеюсь, что такой поворот событий не ввел тебя в ступор. На всякий случай поясню, что элементы <pole> - это поля ставки. Каждый из них имеет в себе еще два элемента: код поля и величину ставки. Тут следует вспомнить, что пользователь может осуществлять ставку не только на конкретные значения, но и на диапазоны чисел. Чтобы решить эту проблему я и решил абстрагироваться от конкретного номера поля, мы используем именно его “код”. Каждая ставка на конкретное поле кодируется просто его номером, под это заняты числа 1-36. У нас имеется счетное множество чисел, любые из которых можно использовать для обозначения ставок на диапазоны выпадающих числовых значений. Так, все красные поля я решил идентифицировать кодом 50, черные – 51, четные числа – 60, нечетные – 61. Диапазон 1-12 кодируется числом 71, 13-24 – 72, 25-26 – 73. Таким образом, если посмотреть на приведенный пример xml-документа с информацией о ставках можно сказать, что пользователь поставил 100 фишек на красное и только 4 - на поле с номером 23. Наверное, наркоман.

Назад на стр. 075-118-2  Содержание  Вперед на стр. 075-118-4