@ch1ps01

Может ли пользователь сменить переменную JS?

В общем, эксперементирую щас с созданием веб мини игры и для снижения нагрузки на сервер хочу сделать, что-бы всё происходило на стороне клиента, есть объект пользователя с балансом и прочими данными и каждые условные 30 секунд на апи сервера отправляется запрос для синхронизации данных с зашифрованным ключом, который на стороне сервера расшифровывается и если ключ совпадает, то всё проходит успешно, так вот в чём вопрос, так как всё происходит на стороне клиента, то пользователь в теории может ведь в условное поле баланса добавить своё значение и при синхронизации на сервер поступит фейковый баланс, так вот, как можно реализовать безопасную синхронизацию?
  • Вопрос задан
  • 3069 просмотров
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
То, что нельзя доверять данным полученным с клиента - это общеизвестное правило.
Ответ написан
Комментировать
@Zukomux
Баланс всегда должен приходить с сервера. Даже если пользователь совершил какую-то операцию, после этого необходимо заново запросить баланс. И считать единственным источником истины только результат верного ответа. Несмотря на то, что на фронте можно нарисовать любые цифры, на сервере всего будет истинное значение
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
ZooMMaX
@ZooMMaX
Согласен с комментариями выше.
А ещё лучше вообще не делать расчёты баланса на стороне клиента. Меньше шансов поймать баг и/или уязвимость.
Ответ написан
Комментировать
@Le0Wolf
Пользователь может читать и менять любые значения на клиенте. Шифровать трафик смысла нет. Максимум, если очень хочется сильно заморочиться, то можно подписывать данные на клиенте но и то это от взлома не спасёт, потому что пользователь сможет валидным ключом подписать невалилные данные, причем используя для этого логику вашего же клиента. Поэтому логику нужно держать на сервере, а не на клиенте. И да, забудьте про "снижение нагрузки на сервер" до тех пор, пока у вас не будет дофига пользователей и сервер перестанет справляться с нагрузкой (спойлер: скорее всего этого не случится вообще никогда)
Ответ написан
Комментировать
@Robyn_rock
Что-то умею
Если что-то типа кликера, где реально могут и 10 чел нагрузить бесплатный сервер, если каждую операцию отправлять на сервер, то ограничить количество кликов. У некоторых мультитач 2 касания принимает только. Считать раз в 10 сек, причём ограничить сервером максимум за 10 сек до какого-то + к количеству, которое реально можно накликать вручную. Взял любую тапалку, подготовил пальчики и минуту прожарил телефон. Посчитал среднее, накинул сверху процентов 20 для самых быстрых рук на тапом западе. И ограничил этим количеством максимум. Заодно можно поставить логирование тех, кто пытается тебя обмануть и банить по критериям. Хотя смысла банить особо нет, всё равно больше, чем твой максимум +20% не будет. Решил ты что больше 100 невозможно, значит 120+ уже попадает в список неблагонадежных клиентов.

Если это не тапалка и там не миллион запросов в секунду, то есть каждую операцию вполне можно передавать, то лучше так и сделать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы