Это больше, система проектирования вопрос / проблема, чем вопрос кодирования.
В принципе, я думаю бросать вместе Bejeweled -esque игра на Facebook , используя только HTML, CSS и JavaScript. Это главным образом из желания узнать все маленькие предостережения FBJS с помощью нетривиального проекта.
Так вот сделка. При разработке для Facebook, фактические вызовы API являются очень дорогими; не только есть дополнительный POST к серверам Facebook, есть также предел апите вызов и дросселирование беспокоиться. В двух словах, тем меньше вызовов на Facebook, тем лучше. В сочетании с синхронизацией проблем даже эта простая игра-головоломка, и есть веские основания, чтобы агрессивно минимизировать число обратных вызовов в целом.
Не будучи экспертом по безопасности, вот дизайн я придумал:
- Встраивание случайного зерна на странице игры.
- Используйте это семя, чтобы создать настольную игру (а также дополнительные части по мере необходимости).
- Tweak семени (XOR, СЦЕПИТЬ и хэш, что-то вроде этого) после каждого игрока двигаться, в зависимости от времени с момента последнего хода. Изменить: Я, вероятно, следует также включать в себя фактический ход принятых в мутирует семя.
- По окончании игры отправлять обратно следующее: время начала игры, каждый ход приняты, и когда, и на стороне клиента результаты.
- На сервере, повторно запустить игру с заданными данными, проверяя корректность время начала и двигаться раз, а затем подтвердить, что матч результаты.
- Для того, чтобы смягчить отказ в обслуживании, сама игра будет переделана, чтобы иметь выигрыш по очереди X состояние.
- Для того, чтобы препятствовать сервер используется в качестве «оракула» своего рода, пользователь проводки назад недопустимое игру будет запрещен для некоторой постоянной времени X (X будучи порядка минут).
Такая конструкция требует три Facebook вызова за игру играл: один для хранения случайных семян перед игрой играют, один, чтобы принести его после того, как игра закончена, и один, чтобы обновить счет игрока, если игра является действительной.
То , что я пытаюсь доказательство системы от прямого до бальной подмены ( HTTP: // ... myscore = 999999999 или аналогичной). Я хотел бы также смягчить «смотреть вперед» атаку, в котором пользователь может сказать , какие части приходят к доске рядом. Также должен быть предотвращены атаки отказ в обслуживании на сервере хостинга (преднамеренный или иначе).
Реальный вопрос, может кто-нибудь увидеть изъян в этом проекте? Эквивалентное есть более простой дизайн, который отвечает моим критериям?
Примечание: Я знаю, как ненужное это, вероятно, но интересный вопрос, тем не менее.
Я собираюсь попробовать и бросить некоторые цифры здесь, чтобы futher проиллюстрировать мои рассуждения, это довольно грубо, но я надеюсь, полезно.
Предполагая, что в 10x10 игровом поле, есть ~ 200 потенциальные ходов (свапирования два смежных частей), большинство из которых являются недопустимыми. Скажем, есть в среднем 5 действительных ходов в «очереди». Если мы ограничиваем действия игрока к раме 50 до 30 000 миллисекунд, есть 149,750 потенциальные новые хэш обеспечили «Тонкую настройку» алгоритм не отбрасывать бит; Я чувствую себя уверенно, скажем, есть, по крайней мере, 10000 потенциальные новые хэш, которые должны быть рассчитаны злоумышленником предполагающим криптографический безопасный хэш используются. Если вы бросаете мин-макс алгоритм на это, ваше решение дерево взрывается очень быстро. Бросьте срок действия сеанса игры в этом, скажем, 30 минут, и я считаю, что нападение, потому что эквивалентный по сложности написания небольшой программы бот играть для вас, который не может быть разумно защититься.













