前端安全 - 是否可以限制访问范围?

Frontend security - Is it possible to limit access scope?

鉴于前端代码的规模越来越大,Webpack 5 提供的微前端和模块联合的概念是一个可能的解决方案。但是,考虑到您正在集成来自其他团队/第 3 方的代码的可能性,外部代码可能会尝试通过简单地访问 window 对象并遍历其子对象来访问它不想要的信息。

这不一定是密码和信用卡等重要信息,这些信息通常使用 iframe 进行隔离。用户电子邮件或跟踪数据等不太敏感的信息可能会被收集和滥用。

在这种情况下,是否有不涉及iframes的技术设置可以限制脚本的访问范围?这在技术上可以在 WebAssembly 程序中实现吗?

Edit: 是的,保守的规则是不运行 不受信任的代码。然而,提出的问题是,如果不使用 iframe 限制其对信息的访问,沙盒前端代码在技术上是否可行。

Javascript 本质上是“public”,所以在某些时候你放入或取出的东西最终会暴露出来,要么通过网络 fetch/XHR,要么通过函数执行.

javascript 中有一个“私有”模式,可防止在对象内部窥探——您可以在其中明确定义公开的 methods/properties:

window.myThing = (function(){

    var a = "a";
    var private_b = "b";

    function one(){
        return "one"
    }

    function private_two(){
        return private_b
    }

    return {
        public_a : a,
        public_one : one
    }

}());


for(var prop in window.myThing){
    console.log(prop, window.myThing[prop])
}

// ----------------------------------
// only the following properties 
// are exposed from the window scope:
// ----------------------------------
//  + public_a as - a
//  + public_one as ƒ one()

理论上,这种类型的模式可以允许内部 (non-exposed/non-traversable) 方法和属性...并利用某种形式的“来龙去脉”加密。