如何检测JS函数的修改?

How to detect modification of JS function?

我有一个执行 SHA256 哈希算法的函数。它是客户端,这意味着它可以像这样在控制台中轻松修改:

function sha256(){ //Your modifications }

客户端通过控制台修改功能的能力暴露了安全漏洞。有没有办法检测 JavaScript 函数的修改(如果可能)?例如,检查函数本身是否被修改。

所讨论的安全漏洞是能够将 sha256 修改为 return 实际未经过哈希处理的结果。

示例修改

假设sha256函数原来是:

function sha256(){
   console.log("nope");
}

但是客户端通过输入以下内容在控制台中更改它:

function sha256(){
    console.log("sure");
}

The ability for the client to modify the function via the console exposes a security loophole.

不,不是。用户可以在他们的计算机上自由地做任何他们选择做的事情,无论有没有你提供的代码。

如果用户可以影响 其他 用户计算机上的代码 运行,这将是一个安全漏洞,但这不可能通过控制台实现。

如果修改客户端代码对您的服务器或其他用户构成威胁,则说明您的服务器软件存在安全漏洞。无论用户是否使用控制台修改代码,这种威胁都存在。

请阅读问题评论和@Bergi 回答以了解非常重要的安全注意事项。将此答案视为理论练习。不要将此用于安全关键场景。

假设myFunction已经在当前范围内:

function myFunction() {};

const check = (() => {
    const str = myFunction.toString();
    return (fn) => fn.toString() === str; 
})();

check(myFunction); // true
check(function myFunction() {}); // true

// ANYTHING ELSE WILL BE false