Просмотр полной версии : Безопасность передачи переменных скрипту PHP
pdvision
16.10.2006, 19:08
Есть игра на флэше, по окончании которой предлагается ввести свои данные для рейтинга, после чего они передаются методом POST PHP скрипту который уже добавляет их в БД.
Есть огромная дырка в безопасности :( позволяющая передать любые значения этому скрипту. Тоесть элементарно декомпилировав флэшку можно получить названия переменных которые передаются скрипту, потом наваять на HTML обычную форму с такими полями и все, рейтинг заломан :(
Подскажите как можно этого избежать?
Делать проверку в скрипте на HTTP_REFFERER неимеет смысла, так как подменить его элементарно.
Что делать незнаю :wacko:
Может кто уже сталкивался с такой проблемой и решил ее?
Заранее спасибо!
FourSide
16.10.2006, 19:45
Как вариант - можно в самом начале игры от сервера получить уникальный код (md5()), а потом всё общение с сервером осуществлять с этим кодом. Но это тоже можно поломать.
Второй вариант - если количество очков в игре будут посылаться не одним числом, а некоим массивом чисел, из которых на сервере итоговый результат будет расчитываться. Но для более осмысленного описания нужно хотя бы знать что за игра.
pdvision
16.10.2006, 21:08
Но для более осмысленного описания нужно хотя бы знать что за игра.
Игра паззл, основной параметр на котором строится рейтинг - время за которое он собран.
Вся проблема в том что флэш декомпилируется и любой алгоритм по запудриванию результатов при желании можно будет вычислить.
Как вариант создавать сессию флэшом, которая будет проверется скриптом на сущестование перед добавлением результатов в базу, но я незнаю может ли флэш создавать сессию (или регистрировать в ней переменные). Хотя даже такой вариант кажется можно поломать.
pdvision
16.10.2006, 21:16
Можно конечно вобще перестроить алгоритм занесения результатов в базу (без передачи времени POST-ом). Например после окончания игры флэш создает текстовый файл с каким нибудь уникальным именем, куда записывает результаты игры и переменную с именем созданного файла передает тем же POST-ом PHP скрипту который парсит его и дабавляет уже из файла результат в базу. Потом это файл стирает с сервака.
Просто проблема в том что флэшку писал не я, а сторонний разработчик и взаимодействие с ним по поводу переделывания алгоритма во флэшэ будет ооочень долгим и утомительным.
Поэтому хотелось бы расмотреть вариант зашиты существующего алгоритма.
Курильский
17.10.2006, 13:04
http://www.flasher.ru/forum/showthread.php?t=70931
Dendroid
17.10.2006, 19:00
Для такого типа игр вполне подходит такой вариант: посылать не только конечный результат, но и большую кучу дополнительной (статистической) информации, например, позволяющей воспроизвести весь процесс сбора пазла (фактически, все манипуляции мышкой). Создавая десятки и сотни килобайт дополнительных данных, делаем подделку их ОЧЕНЬ трудоёмкой. Тем более, что подделать данные качественно очень сложно (чтобы это выглядело похоже на игру человека, очень уж специфичны моменты, когда человек задумывается, а когда может играть быстро), а проверить довольно просто, глазами: написать проигрыватель (на основании сохранённых данных), который будет показывать процесс сбоки. Тем более такую проверку можно поручить остальным игрокам - и это само по себе будет довольно интересно, если они смогут посмотреть как создавался рекорд в движении. Тем более, имея такую кучу статистических данных на сервере, можно легко вычислять подозрительных игроков, просто посмотрев как изменялась результативность их игры со временем. :)
Такой способ делает взлом самих данных проктически нереальным... Уже работает на одном из игровых серверов в нескольких игрушках. ;)
Проигрыватель может отсекать читеров и работать в автоматическом режиме (при желании, читеров можно проверить визуально).
Во всяком случае это избавляет от просмотра сотен игр.
Dendroid
17.10.2006, 19:13
Ну зачем же сотен - нам есть дело только до верхушки таблицы рекордов, да и я же говорю, можно это отдать на откуп остальным претендентам, надо всегда устраивать так, чтобы сама система работала против нечестной игры ;)
pdvision
17.10.2006, 21:17
Для такого типа игр вполне подходит такой вариант: посылать не только конечный результат, но и большую кучу дополнительной (статистической) информации
Такой вариант тоже расматривался. Но в моем случае затраты на его исполнение будут неоправданы (я говорю про разработку проигрывателя) так как игра нужна всего в течении нескольких месяцев. Конечно можно отсылать кучу статистики скрипту и потом вылавливать в ней несоответствия, но в любом случае гарантий от взлома никаких нет. Это лишь очередное препятствие для читера.
Сегодня мне предложили еще один вариант. Суть состоит в использовании теории вероятности, тоесть определяется минимальное время за который игрок может собрать паззл с первого раза. И на основании этого параметра резать читеров. грубо говоря отслеживать всю историю игры каждого игрока. Если он постепенно уменьшал свой результат то скорее всего это честный игрок. Если с первого раза показывает очень маленькое время, то скорее всего читер.
Но и тут есть проблема. Либой читер первый раз (а возможно и несколько раз) будет играть честно дабы понять как работает игра. Соответственно в базе его результат будет идти по убываию и он обойдет эту проверку.
Насколько я понял почитав форум сделать хорошую защиту нельзя. Достичь максимального эффекта можно лишь используя все изестные наработки по защите если так можно сказать (уместнее будет говорить о запутывание читера).
Честно сказать с флэшем работаю впервые и сильно удивлен уровнем защищенности SWF. В то время как все разработчики софта уделяют огромное внимание секьюрности своих проектов Macromedia уже в течении 8 версий делает флэш такими незащищенными. Будем надеяться что Adobe исправит этот недостаток.
Честно сказать с флэшем работаю впервые и сильно удивлен уровнем защищенности SWF. В то время как все разработчики софта уделяют огромное внимание секьюрности своих проектов Macromedia уже в течении 8 версий делает флэш такими незащищенными. Будем надеяться что Adobe исправит этот недостаток.SWF открытый формат.
Dendroid
18.10.2006, 07:28
pdvision, это всё теоретизирования и спекуляции, примерно такие же, как и про текстовый файл "создаваемый флэшкой на сервере" - очень далеко от реальности...
Моя защита она уже реально работает в нескольких проектах, и делает читерство нерентабельным, и отличается от вашей нововыдуманной она именно тем, что в ней затраты на проверку данных на много порядков меньше, чем на их подделку. Плеер для игры, если у вас уже есть сам движок игры - это, обычно, меньше страницы кода (чтение файла плюс цикл по времени плюс вызовы функций, которые раньше вызывались событиями мыши с игры). У меня самая сложная часть - собственно, выдумывание как сделать данные стохастическими, но, одновременно, достоверно имитирующими игру человека - отданы на откуп читерам - пусть себе зубы ломают, а мы потом, если возникнет подозрение, или перед тем как давать большой денежный приз, проанализируем данные, выдумывая критерии достоверности по ходу анализа. А то, что об этих подозрениях могут ещё судить другие игроки, даёт процессу легитимность.
А Вы пытаетесь заложить в коде сразу это самое сложное - законы вероятности, при этом учесть всё: "а если игрок зашёл с нового имени и сразу заиграл хорошо?", "а если игрок убежал к телефону, а за него села поиграть сестрёнка?", "а если игроку надоело мучаться с тачпадом, и он взял мышь?", и предоставляя уже читеру выдумывать обходные пути по ходу, что делает уже Вашу работу гораздо более затратной, чем у читера и, в конечном итоге, нерентабельной.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.