Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确保javascript代码未被修改_Javascript - Fatal编程技术网

确保javascript代码未被修改

确保javascript代码未被修改,javascript,Javascript,假设我们有一个小的javascript代码,如下所示: function calculate(input) { input = input + 100; // the code will send the result here to the server } 由于javascript代码可以修改,任何人都可以将函数中硬编码的100更改为任意数字,从而修改服务器将接收的最终数据 服务器上是否有任何方法可以验证运行的函数在运行时是否未被修改 用例:我有一些大的计算,需要执

假设我们有一个小的javascript代码,如下所示:

function calculate(input) {
      input = input + 100;
      // the code will send the result here to the server
}
由于javascript代码可以修改,任何人都可以将函数中硬编码的100更改为任意数字,从而修改服务器将接收的最终数据

服务器上是否有任何方法可以验证运行的函数在运行时是否未被修改

用例:我有一些大的计算,需要执行,我正在考虑用JS为这些计算创建代码(这会让它们慢一点),但如果我能提供足够好的激励(可能是金钱奖励,或者类似的东西),对于其他人在这些计算中使用他们的计算机,计算部分信息并将其发送给我,我需要的计算能力要小得多,因为工作将在其他计算机之间共享


目前在这个用例中解决这个问题的唯一方法是在多个系统上多次计算零件作业,如果结果不匹配,这意味着有人干扰了计算代码,但如果有人有更好的想法,我洗耳恭听:)

我的意思是,服务器无法知道其数据是如何计算的,因此通常情况下这不是一件真正的事情。如果需要验证数据的合法性,那么应该在服务器上进行计算,而不是在客户机上进行可见的计算

如果您想确保函数未通过控制台或其他方式更改,可以将其指定给常量并冻结:
const calculate=Object.freeze(函数(输入){/*这里的代码…*/})

但这并不能保证有人不仅仅是自己发送数据,完全绕过了你的函数,所以这是一个糟糕的想法。我想重申这一点,只是想澄清一下:这是一个糟糕的想法。在服务器而不是客户端上执行敏感计算


编辑你的更新听起来非常像区块链的用例…

假设你说的是在浏览器中执行的JS-不,没有办法做到这一点。如果你需要这种验证,你必须在服务器端处理它。没有在浏览器上运行的JavaScript代码,用户可能无法更改。不,没有。不管怎样,这没关系;他们可以在不调用该函数的情况下发出完全不同的请求。这是一个有趣的提问。如果返回一个元组以及结果和方法散列,那就太酷了。作为一般规则,如果安全性是一个问题,那么您必须接受来自客户端的所有内容都可能受到危害,并且您对此无能为力。不幸的是,这对我没有帮助。我将用我需要的用例更新这个问题。如果我冻结两个函数,作为常量,一个用于从服务器检索需要处理的数据,以及散列,另一个用于计算,并将原始散列发送回服务器,该怎么办。如果函数在页面运行时被冻结为常量,那么没有人可以更改该函数吗?没有人可以更改该函数,但是他们可以轻松编写自己的函数来发送他们想要的任何数据,并且他们可以始终访问服务器发送给他们的数据。因此,他们只需编写一个两行脚本,就可以使用正确的哈希值将错误数据发送回服务器。在客户端没有办法做你想做的事情。我不是在尝试创建一个新的区块链:)这将用于我正在制作的游戏:)@AdamBaranyai你想要一个客户端可见代码无法在客户端实现的安全级别,而无需用户的任何额外验证?对不起,但我认为你要求的太多了,因为没有办法对这些限制做些什么。安全需要付出额外的努力;要么是你自己,在服务器上完成,要么是用户自己,他们需要做的不仅仅是输入一个URL。