Предотвращение мошеннической подачи на табло - PullRequest
1 голос
/ 23 марта 2009

Я работаю над бэкендом для флэш-игры, и мне нужно защитить данные, поступающие в табло.

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

В данный момент я думаю в соответствии с этим

  1. Пользователь играет в игру и щелкает, чтобы отправить свой счет
  2. В фоновом режиме баннер отправляет счет и исходный домен сценарию на главном сайте.
  3. Скрипт проверки домена является одним из допустимых доменов, на котором размещено объявление.
  4. Если все правильно, сценарий создает хэш этой оценки и домена и сохраняет его в базе данных вместе со счетом.
  5. Скрипт возвращает хэш Flash, который накладывает его на строку запроса getURL, открывающего главное табло
  6. Страница табло проверяет реферера, чтобы убедиться, что он является одним из действительных доменов.
  7. Если это так, то проверяет базу данных на хеш, если это действительный токен
  8. пользователь затем вводит свои данные и запись обновляется на основе хеша

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

Какой тип хеширования / проверки следует использовать на шаге 4? Какое правильное название для этой операции: хэш, контрольная сумма или что-то еще?

Я понимаю, что, будучи клиентской технологией, Flash на самом деле никогда не будет ТАКИМ безопасным, но, на мой взгляд, что-то вроде вышесказанного настолько же сложно, как вы собираетесь взломать приложение такого типа.

ОБНОВЛЕНИЕ: Моя главная цель - сделать так, чтобы людям было сложнее найти URL-адрес сценария, который добавляет оценку в базу данных, и просто рассылать спам с поддельными результатами.

Спасибо, Грег

Ответы [ 2 ]

2 голосов
/ 23 марта 2009

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

Вот пара вещей, которые вы можете попробовать:

  • Зарегистрируйте входы в игру и отправьте их вместе со счетом. Затем сервер может подтвердить, что оценка соответствует возможной игре. Вы также можете обнаружить дублирующиеся представления таким образом.
  • Примените ограничение скорости, чтобы клиенты не могли отправлять оценки в явно нечеловеческом темпе. Примените верхние пределы допустимых баллов, основанные на том, что фактически возможно достичь, и нижние пределы для таких вещей, как действия в секунду.
  • Используйте предыдущие входные данные, чтобы частично заполнить генератор псевдослучайных чисел (при условии, что вы используете один). Это снижает вероятность того, что клиенты могут слегка изменить представление и при этом получить действительную комбинацию «игра / счет».
1 голос
/ 23 марта 2009

Ранее я работал в игровой индустрии и что-то делал в этом направлении. Насколько мне известно, никто не удосужился взломать партитуру для сдачи партитуры.

То, как это было сделано, было:

  1. Генерация случайного числа в виде соли (из вспышки)
  2. Кодирование партитуры с использованием математических операций на основе соли (из флэш-памяти)
  3. Добавьте контрольную сумму, чтобы убедиться, что на счете не было закалки (из вспышки)
  4. Отправьте счет и все необходимые данные на страницу отправки счета
  5. На сервере подтвердите, что счет не был изменен, используя контрольную сумму
  6. Если оценка действительна, вставьте ее в базу данных, в противном случае отклоните ее
  7. Если хотите, вы можете зарегистрировать IP-адреса отправителей результатов, нарушающих контрольные суммы (может быть, у вас нет трех контрольных сумм) и добавить сценарий, чтобы запретить им доступ к серверу на 1 час, но это вероятно, не потребуется, если кто-то не захочет так плохо взломать ваш код.

Примечание: Хеширование / проверка контрольных сумм производились с использованием пользовательской функции. Не нужно что-то очень безопасное. Это было сделано с использованием вычислений на соль и счет. Некоторые простые математические операции, такие как суммы, умножения и вычитания.


Редактировать : простой алгоритм / математика для контрольной суммы

Допустим, ваш пользователь набрал 5885 .
Вы генерируете случайное число в виде соли 134789 (постоянная длина, отступ с 0)

cryptedScore = Оценка * Соль (здесь следует использовать что-то более сложное, но это только пример)

В нашем примере зашифрованная оценка будет: 793233265

Теперь для контрольной суммы, допустим, вы хотите, чтобы в качестве контрольной суммы было значение 253 .
Вы добавляете все номера вашего зашифрованного счета 7 + 9 + 3 + 2 + 3 + 3 + 2 + 6 + 5 = 40

Теперь вы вычисляете значение своей контрольной суммы для этой оценки
253 - (сумма зашифрованных баллов% 253 )

Теперь у нас есть следующие числа:
соль = 134789
зашифрованный счет = 793233265
контрольная сумма = 40

Вы делаете запрос на сервер, отправляя 134789793233265040 в виде оценки.

На сервере результатов вы можете разделить 793233265 на 134789 , давая 5885 , и проверить контрольную сумму, используя ту же функцию, что и раньше.

Если контрольная сумма не пройдена, цифры были подделаны.

Вы могли бы, вероятно, получить что-то гораздо более безопасное, но это должно сработать.

...