假设我们有一个小的javascript代码,如下所示:
function calculate(input) {
input = input + 100;
// the code will send the result here to the server
}
由于可以修改javascript代码,因此任何人都可以将函数中的硬编码100更改为任意数字,从而修改服务器将接收的最终数据。
服务器上是否有任何方法可以验证运行的功能在运行时是否未被修改?
用例:我需要执行一些大的计算,并且我正在考虑在JS中为这些计算创建代码(这会使它们变慢),但是如果我能给出足够好的奖励(也许是金钱的奖励,或类似的奖励),让其他人在计算中使用他们的计算机,计算部分信息并将其发送给我,我将需要的计算能力大大降低,因为工作将在其他计算机之间共享。
目前在此用例中解决此问题的唯一方法是在多个系统上多次计算部分作业,如果结果不匹配,则意味着有人在干扰计算代码,但是,如果有人有更好的主意,我会很高兴:)
答案 0 :(得分:3)
我的意思是,服务器无法知道其数据是如何计算的,因此通常这并不是一件真正的事情。如果需要验证数据的合法性,则应该在服务器上而不是在客户端上进行计算。
如果要确保未通过控制台或其他方式更改功能,可以将其分配给常量并将其冻结:const calculate = Object.freeze(function(input) { /* code here... */ });
但是,这并不能保证某人不仅可以自己发送数据并完全绕开您的功能,所以这是一个糟糕的主意。我只想重申一下:这是一个糟糕的主意。在服务器而不是客户端上进行敏感的计算。
编辑您的更新听起来非常像区块链的用例...