javascript私有变量真的安全吗?

时间:2016-06-30 15:01:53

标签: javascript security

我正在考虑让其他人在我的网页上注入脚本。我有一些用户已知的秘密,所以我不介意用户打开调试器来检查变量。 (真正的秘密和真正的安全当然是在后端处理的)

我不想让这些第三方脚本访问这些秘密。

所以这是我的问题:外部代码可以访问我的对象的私有成员吗?或者换一种说法:JavaScript中私有变量的安全性如何?我很困惑,因为我理解它的方式,似乎原型并没有真正帮助保守秘密。与此同时,我认为这种安全考虑可能是网络浏览器的责任,但我不是100%肯定。

非常感谢!

编辑:我特别想到恶意的人会查看源并故意编写代码以试图提取这些私有成员的价值的情况。我想知道这是可能的程度 - 如果有的话。

编辑:

我指的是TypeScript调用的“私有”变量,它转换为:

class Greeter {
    private greeting: string;
    public message: string;
    constructor(message: string) {
        this.message = message;
    }
    greet() {
        return "Hello, " + this.message;
    }
}

看着JS,我能理解它为什么不安全。我差点忘了TypeScript不是JS。但我一般都在谈论封装javascript的任何方法。

1 个答案:

答案 0 :(得分:2)

  

我不想让这些第三方脚本访问这些秘密。

然后,不要让他们访问该页面。将它们锁定在交叉原始的iframe沙箱中。

  

外部代码可以访问我的对象的私有成员吗?

是。它可能不得不跳过一些可怕的箍(这取决于你如何实现隐私)但我无法想到在同一JS环境中可靠地保护代码免受其他代码的影响。

  

如何区别对待:JavaScript中私有变量的安全性如何?

不是很好。

  

与此同时,我认为这种安全考虑可能是网络浏览器的责任

直到您将第三方源代码加载到程序中为止。