SvetlyiAkaPro
@SvetlyiAkaPro

Как разделить работу сервера и клиента с точки зрения безопасности?

При написании игры возник вопрос, как разделять логику приложения? (Серверная часть - Node JS, клиентская - Canvas HTML5)
Чтобы избежать читерства, подделки данных нужно всю логику запереть на сервере, а на клиенте оставить только отображение или как? Возможно есть какие-то другие варианты... И сильно ли влияют расчеты на быстродействие Node? Скажем, каждый шаг просчитывается по какой-то не очень сложной математической формуле
  • Вопрос задан
  • 2660 просмотров
Решения вопроса 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Считайте и на сервере и на клиенте, чтобы постоянно не гонять между ними результаты, но иногда сравнивайте. Если клиент не делает запросы на сравнение, но другие запросы делает, или его данные отличаются от серверных, то он читер - блокируйте. Нода не очень хороша в долгих расчетах, но если формула очень простая, и вам не нужно просчитывать миры с точностью до пылинки, то проблемы не будет. Для клиент-серверного взаимодействия используйте websocket (двусторонний обмен) и Server-sent Events (односторонняя трансляция серверных событий на клиента, но много проще в реализации и надежности). При обмене клиента и сервера добавьте немного криптографии, например, постоянно изменяющийся код, которым подписывается каждое сообщение при обмене между клиентом и сервером. Код может зависеть от порядкового номера сообщения (синхронные счетчики должны быть у клиента и сервера), от предыдущего сгенерированного случайного числа, присланного сервером, от шага в игре, и этот код можно примешивать к контрольной сумме сообщения, приходящего с клиента (это чтобы было сложно написать эмулятор, прикидывающийся клиентом).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы