如何检测JS函数的修改



我有一个函数可以执行SHA256哈希算法。它是客户端,这意味着它可以很容易地在控制台中进行修改,如下所示:

function sha256(){ //Your modifications }

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

有问题的安全漏洞是能够修改sha256以返回实际未散列的结果。

示例修改

假设sha256函数最初是:

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

但客户端在控制台中输入以下内容进行更改:

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

客户端通过控制台修改函数的能力暴露了一个安全漏洞。

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

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

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

请阅读问题评论和@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

最新更新