Идеи для разработки Secure, метод «Low Cost» для подтверждения результатов на стороне клиента игры

голоса
3

Это больше, система проектирования вопрос / проблема, чем вопрос кодирования.

В принципе, я думаю бросать вместе Bejeweled -esque игра на Facebook , используя только HTML, CSS и JavaScript. Это главным образом из желания узнать все маленькие предостережения FBJS с помощью нетривиального проекта.

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

Не будучи экспертом по безопасности, вот дизайн я придумал:

  1. Встраивание случайного зерна на странице игры.
  2. Используйте это семя, чтобы создать настольную игру (а также дополнительные части по мере необходимости).
  3. Tweak семени (XOR, СЦЕПИТЬ и хэш, что-то вроде этого) после каждого игрока двигаться, в зависимости от времени с момента последнего хода. Изменить: Я, вероятно, следует также включать в себя фактический ход принятых в мутирует семя.
  4. По окончании игры отправлять обратно следующее: время начала игры, каждый ход приняты, и когда, и на стороне клиента результаты.
  5. На сервере, повторно запустить игру с заданными данными, проверяя корректность время начала и двигаться раз, а затем подтвердить, что матч результаты.
  6. Для того, чтобы смягчить отказ в обслуживании, сама игра будет переделана, чтобы иметь выигрыш по очереди X состояние.
  7. Для того, чтобы препятствовать сервер используется в качестве «оракула» своего рода, пользователь проводки назад недопустимое игру будет запрещен для некоторой постоянной времени X (X будучи порядка минут).

Такая конструкция требует три Facebook вызова за игру играл: один для хранения случайных семян перед игрой играют, один, чтобы принести его после того, как игра закончена, и один, чтобы обновить счет игрока, если игра является действительной.

То , что я пытаюсь доказательство системы от прямого до бальной подмены ( HTTP: // ... myscore = 999999999 или аналогичной). Я хотел бы также смягчить «смотреть вперед» атаку, в котором пользователь может сказать , какие части приходят к доске рядом. Также должен быть предотвращены атаки отказ в обслуживании на сервере хостинга (преднамеренный или иначе).

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

Примечание: Я знаю, как ненужное это, вероятно, но интересный вопрос, тем не менее.


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

Предполагая, что в 10x10 игровом поле, есть ~ 200 потенциальные ходов (свапирования два смежных частей), большинство из которых являются недопустимыми. Скажем, есть в среднем 5 действительных ходов в «очереди». Если мы ограничиваем действия игрока к раме 50 до 30 000 миллисекунд, есть 149,750 потенциальные новые хэш обеспечили «Тонкую настройку» алгоритм не отбрасывать бит; Я чувствую себя уверенно, скажем, есть, по крайней мере, 10000 потенциальные новые хэш, которые должны быть рассчитаны злоумышленником предполагающим криптографический безопасный хэш используются. Если вы бросаете мин-макс алгоритм на это, ваше решение дерево взрывается очень быстро. Бросьте срок действия сеанса игры в этом, скажем, 30 минут, и я считаю, что нападение, потому что эквивалентный по сложности написания небольшой программы бот играть для вас, который не может быть разумно защититься.

Задан 26/05/2009 в 22:04
источник пользователем
На других языках...                            


2 ответов

голоса
3

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

Ответил 26/05/2009 в 22:14
источник пользователем

голоса
0

Я, как правило, говорят, что это невозможно сделать. Зачем? Вы не можете доверять клиенту - я мог бы просто анализировать и укомплектовать переписать код на стороне клиента и возвращать любые значения, мне нравится. Единственный способ защитить вас от обмана и всех видов атак для выполнения логики на сервере - клиент будет просто собрать пользовательский ввод и вывода изображения с сервером. Но это укомплектовать против вашего дизайна целью минимизировать количество обращений к серверу.

Ответил 26/05/2009 в 22:20
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more