Здравсвуйте, планирую разработать игру на JS с использованием socket.io и Node js на сервере.
Смысл игры планируется в наборе очков, как можно передавать количество очков или прибавление очков на сервер безопасным путем? Чтобы нельзя было проанализировать код и подменить данные при отправке?
sema-fedotov, ну, например, прилетает, что игроку нужно прибавить 1000 очков, а в вашей игре тысячу очков можно заработать за... ммм... никогда... Верифицируйте данные.
sema-fedotov, если у вас условия для получения очков проверяются исключительно на клиенте, у вас неправильный дизайн игры.
С клиента на сервер должны уходить только наиболее простые данные: пользовательский ввод, датчики. Дальнейшая обработка должна происходить на сервере.
Например, дана задача нарисовать квадрат.
Неверный подход: проверять, нарисован ли квадрат на клиенте, и отправлять на сервер булево значение - "это квадрат" или "это не квадрат".
Верный подход: передавать на сервер координаты нажатий для того, чтобы на сервере вычислить: квадрат это или не квадрат.
Да, человек может роботом рисовать квадраты, и от этого уже никак не защититься, разве что эвристикой (например, человек не сможет нарисовать несколько точно одинаковых и ровных квадратов подряд; человек не может 20 часов подряд сидеть и рисовать квадраты).
А если вот взять, например, игру subway surfers, там мы во время игры получаем монетки на клиенте, каким образом, при тааком раскладе, они будут передаваться на сервер?
sema-fedotov, не могу говорить за реализацию конкретной игры, но принцип один и тот: вы должны передавать не количество монет. Передаете координаты, сервер у вас, конечно же, знает где и что располагается, проверяете, "наступил" ли игрок действительно на моменты, начисляете очки.
Использовать HTTPS.
Все передаваемые запросы необходимо подписывать.
На JS нельзя ничего сделать безопасно.
Всю критическую логику должен обрабатывать сервер, клиент только отправляет запрос на нужные действия, а сервер принимает решение, выполнять их или нет.
Работать через сессии