Какие способы гарантированной неподмены данных с клиента существуют?
Да, я понимаю что все что улетает с клиента можно подмнеить, но спрашиваю о другом.
Допустим, мой скрипт в определенный момент генерирует строку "Привет". Мне нужно ее доставить на сервер и гарантировать что эти данные не были подменены. Т.е. надо что-то типо подписи данных. Это похоже на случай с JWT, но в данном случае я не могу подписывать токен на клиенте, т.к. для этого мне надо секрет передать клиент, а значит кто угодно может взять этот секрет и подписать свои данные.
Олег, конечно сумбурно изложил, потмоу что ты совершенно не понимаешь его принципа работы.
Каким образом ты предлагаешь подписывать данные на клиенте? Публичным ключем?))
Автор под понятие "секрет" полагает "секрет" которым ПОДПИСЫВАЕТСЯ токен, а не само "секретное содержимое". Это же очевидно из поста.
Думаю исходная задача, что-то типа такой.
{Игрок номер, заработано очков.}
без подписи такое сообщение может слать любой человек от лица любого игрока.
Обеспечив секретность подписи при передаче от сервера к игроку мы сможем
гарантировать, только что такие сообщения отсылаются от лица самого игрока.
Остается проблема, того, что клиент отсылающий такие сообщения может быть подделан.
Допустим мы реализовали супер защиту но игровая часть после матча вызывет
ПередатьМойИтог(набрано_очков);
Т.е. читеру нужно просто ее найти и вызывать напрямую.
Таким образом проверка честности игрока на клиенте не реализуема для javascript.
Думаю, что никак. В самой постановке задачи у вас что: клиент заведомо ничего не знает про сервер. Тогда если мы представим параллельно идущий процесс клиента B, который полностью дублирует работу клиента A, то в какой-то момент времени данные с клиента B могут быть переданы серверу вместо клиента A.
HTTPS/SSL как раз и существует для решения подобных задач, в том числе. Просто используйте его - никто ничего не подменит (ну кроме уж случаев с перехватом сертификата, но это уже другой уровень).
jeruthadam, извините, не понял сразу. Я прочитал "подмену" как подмену на линии, а не в самом приложении.
Ну тогда согласен с sim3x - никак. Клиент имеет полный контроль над своим железом и ПО, гарантировать тут ничего нельзя, можно только делать этот взлом сложнее.
jeruthadam, со 100% гарантией - нет. Но можно пытаться сделать это настолько сложно, что бы у атакующего не было желания этим заниматься. Например написать на С++ кусок и скомпилировать emscripten в JS.