如何保护客户端JavaScript变量?

How to protect a client side JavaScript variable?

提问人:flowb 提问时间:5/31/2020 最后编辑:flowb 更新时间:5/31/2020 访问量:702

问:

使用以下函数检查给定 URL 是否存在。代码是在客户端(浏览器)上执行的,有没有办法(如果可能的话)保护 url 变量不被浏览器调试器更改,同时将函数保留在客户端?

请注意,该变量由服务器生成并在 JS 脚本(客户端)上设置url

function UrlExists(url, callback)
{
    var http = new XMLHttpRequest();
    http.open('HEAD', url);
    http.onreadystatechange = function() {
        if (this.readyState == this.DONE) {
            callback(this.status != 404);
        }
    };
    http.send();
}

函数

JavaScript Google-chrome 变量浏览器 客户端

评论


答:

2赞 Quentin 5/31/2020 #1

不。

代码在浏览器中运行。浏览器完全在用户的控制之下。JavaScript 很容易去混淆。

1赞 Mir 5/31/2020 #2

如果您希望保护变量的值不被控制台等编辑或查看,则应查看通过 IIFE(立即调用的函数表达式)进行范围界定。

由于我们 IIFE 中的匿名函数是一个函数表达式 并且未分配给全局变量,则没有全局属性 正在创建,以及在 函数表达式的范围限定为表达式本身。

这样,在此函数中声明和设置的任何变量都不能仅通过控制台工作的窗口对象进行访问。

如果您正在寻找一些额外的安全性和加密功能,请搜索JavaScript Obfuscator

评论

0赞 flowb 5/31/2020
很好的答案,我刚刚投了赞成票,但这不就是一个把戏吗?我的意思是,如果我们编辑JS引擎的代码,理论上我们可以改变这些变量吗?不是吗?
0赞 Mir 5/31/2020
是的,上述方法只是一种解决方法。
0赞 flowb 5/31/2020 #3

虽然存在不同的混淆 js 的方法,例如 https://obfuscator.io 但这并不能保证任何真正的额外安全性(但这会使代码不容易阅读/调试)。

在客户端(在浏览器 js 引擎上)处理的任何内容都可以在客户端使用调试器或其他方法进行更改。