Можно ли подписать / зашифровать данные на стороне клиента, чтобы пользователь не манипулировал ими? - PullRequest
0 голосов
/ 21 января 2019

Я сохраняю информацию в локальном хранилище и хочу убедиться, что пользователь не заменил данные или не позабавился с ними.

Клиент получает объект, анализирует его в javascript, выполняет его и сохраняетчасть из них находится в локальном хранилище браузера.

Данные отправляются на сервер каждые 30 секунд, и сервер отвечает другим объектом на основе предыдущих отправленных данных.

Процесс часто происходитпоэтому было бы предпочтительнее избегать отправки на сервер тонны данных и делать тяжелые запросы для проверки целостности.

Я знаю, что Javascript в клиенте склонен к отладке, обратному проектированию и т. д. Но это определенно добавит слойбезопасности, так что, по крайней мере, некоторые люди не будут беспокоиться.(Безопасность через неизвестность)

Первоначально я хотел создать контрольную сумму значения, которое я хочу сохранить, отправить его на сервер и сравнить с сохраненной контрольной суммой.Если результат не совпадает, отклоните данные на стороне клиента.Я думаю, что было бы предпочтительнее избежать хранения в базе данных и иметь возможность проверить, является ли это допустимым с какой-либо функцией.

Я бы предпочел, чтобы сохраненные данные выглядели как токен (как подписанная или зашифрованная строка base64)а не необработанные данные, так как это приведет к утечке некоторой информации о том, как работает код, и может сделать его уязвимым.

Существуют ли библиотеки или методы, которые могут помочь мне в этом путешествии?

1 Ответ

0 голосов
/ 21 января 2019

Можно ли подписать / зашифровать данные на стороне клиента, чтобы пользователь не манипулировал ими?

Короткий ответ - Нет, это невозможно.Длинный ответ - Любой код аутентификации сообщения (signature, hmac, ..) требует секретного значения.Как только вы сделаете подпись на стороне клиента через JavaScript, вы не сможете предотвратить доступ пользователя к секретным данным или изменить данные.

Примите во внимание, что пользователь даже может изменить приложение, чтобы изменитьпроверка на стороне клиента.Короче говоря - никогда не доверяйте вводу пользователя, вы всегда должны проверять данные на стороне сервера.

Предложение - вы можете отправлять данные службе сервера, и сервер может подписывать / отправлять данные.Точно так же, как вы могли бы проверить целостность данных.

Но это определенно добавило бы уровень безопасности, так что, по крайней мере, некоторые люди не будут беспокоиться.(Безопасность через мрак)

На мой взгляд - это не имеет большого значения.Если пользователю все равно, он не будет изменять данные.Если у вас есть выделенный пользователь, никакой уровень запутывания не остановит его.

Я бы предпочел, чтобы сохраненные данные выглядели как токен (как подписанная или зашифрованная строка base64)

Ничто не мешает вам сделать это.

...