javascript - 是否可以在客户端对数据进行签名/加密以确保它不被用户操纵?
问题描述
我将信息保存在本地存储中,并且我想确保用户没有替换数据或从中获得乐趣。
客户端收到一个对象,javascript 分析它,做它的事情并将其中的一些存储在浏览器的本地存储中。
数据每 30 秒发送一次到服务器,服务器根据之前发送的数据由另一个对象回复。
该过程经常发生,因此最好避免向服务器发送大量数据并进行大量查询以验证完整性。
我知道客户端中的 Javascript 易于调试、逆向工程等。但它肯定会增加一层安全性,因此至少有些人不会打扰。(通过默默无闻的安全)
我最初的想法是对要存储的值进行校验和,将其发送到服务器并将其与存储的校验和进行比较。如果结果不匹配,则在客户端关闭数据。我认为最好避免存储在数据库中并能够通过某些功能检查它是否合法。
我希望存储的数据看起来像一个令牌(如签名或加密的 base64 字符串)而不是原始数据,因为它会泄露一些关于代码如何工作的信息并可能使其易受攻击。
有没有图书馆或这样做的方法可以帮助我的旅程?
解决方案
是否可以在客户端对数据进行签名/加密以确保它不被用户操纵?
简短的回答 - 不,这是不可能的。
长答案 - 任何消息验证码(签名、hmac、..)都需要一个秘密值。一旦您通过 JavaScript 在客户端进行签名,您就无法阻止用户访问机密或修改数据。
考虑到用户甚至可以修改应用程序以更改客户端验证。长话短说-永远不要相信用户的输入,您必须始终在服务器端验证数据。
建议 - 您可以将数据发送到服务器服务,服务器可以对数据进行签名/hmac。以同样的方式验证数据完整性。
但这肯定会增加一层安全性,因此至少有些人不会打扰。(通过默默无闻的安全)
在我看来 - 这并不重要。如果用户不关心,他不会修改数据。如果您有一个忠诚的用户,那么任何程度的混淆都不会阻止他。
我希望存储的数据看起来像一个令牌(如签名或加密的 base64 字符串)
没有什么能阻止你这样做。
推荐阅读
- mysql - 一个桶的数据不存在时,如何选择桶中的SQL数据?
- javascript - 遍历有效 JSON 时无法将 undefined 或 null 转换为对象
- email - Flutter - 如何实现一个电子邮件 TextFormField 小部件以在多个屏幕中使用?
- sql - Oracle SQL - 基于分组和条件运行求和
- javascript - 在javascript画布上的椭圆内剪切线
- php - 我怎么不能使用 Doctrine + convert_tz()
- catel - 调试时如何单步执行 Catel 代码
- swift - 如何遍历具有地图数组的 Firestore 文档?
- javascript - 如何更改a的文本
在 React.js 中有一个按钮?
- c++ - 标头保护中的 MYHEADER_HPP 如何与实际文件名“MyHeader.hpp”相关