Вопрос

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

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

В данный момент я думаю примерно так

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

Другие советы

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

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

  • Внесите входные данные в игру и отправьте их вместе со счетом.Затем сервер может подтвердить, что счет соответствует возможной игре.Таким образом, вы также можете обнаружить дублирующиеся отправки.
  • Примените ограничение скорости, чтобы помешать клиентам выставлять оценки с явно нечеловеческой скоростью.Применяйте верхние ограничения к допустимым баллам, основываясь на том, чего на самом деле можно достичь, и более низкие ограничения на такие вещи, как количество действий в секунду.
  • Используйте предыдущие входные данные для частичного заполнения генератора псевдослучайных чисел (при условии, что вы его используете).Это снижает вероятность того, что клиенты могут немного изменить отправку и все равно получить действительную комбинацию игра / счет.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top