如何检测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
我有一个执行 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