是否可以在客户端对数据进行签名/加密,以确保用户不对其进行操作?

时间:2019-01-20 21:14:54

标签: javascript encryption obfuscation sign

我将信息保存在本地存储中,我想确保用户没有替换数据或对数据感到满意。

客户端会收到一个对象,用JavaScript对其进行分析,然后将其存储在浏览器的本地存储中。

每30秒将数据发送到服务器,服务器根据另一个先前发送的数据由另一个对象答复。

该过程经常发生,因此最好避免发送服务器大量数据并进行大量查询以验证完整性。

我知道客户端中的Java脚本易于调试,逆向工程等。但这肯定会增加一层安全性,因此至少有些人不会打扰。 (默默无闻的安全性)

我最初的想法是对要存储的值进行校验和,然后将其发送到服务器,然后将其与存储的校验和进行比较。如果结果不匹配,请在客户端上消除数据。我认为最好避免存储在数据库中,并且能够检查某些功能是否合法。

我希望存储的数据看起来像令牌(如签名或加密的base64字符串)而不是原始数据,因为它会泄漏一些有关代码工作方式的信息,并可能使其变得脆弱。

是否有图书馆或这样做的方法可以对我的旅途有所帮助?

1 个答案:

答案 0 :(得分:1)

  

是否可以在客户端对数据进行签名/加密,以确保不被用户操纵?

简短询问-不,不可能。
长答案-任何消息身份验证代码(签名,hmac等)都需要一个秘密值。一旦您通过JavaScript在客户端进行签名,便无法阻止用户访问机密或修改数据。

考虑到用户甚至可以修改应用程序以更改客户端验证。长话短说-永远不要信任用户的输入,您必须始终在服务器端验证数据。

建议-您可以将数据发送到服务器服务,并且服务器可以对数据进行签名/ hmac。验证数据完整性的方法相同。

  

但这肯定会增加一层安全性,因此至少有些人不会打扰。 (默默无闻的安全性)

我认为-没关系。如果用户不在乎,他将不会修改数据。如果您有一个目标明确的用户,那么不会产生任何困惑。

  

我希望存储的数据看起来像令牌(例如签名或加密的base64字符串)

没有什么可以阻止您这样做的。