首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js沙箱

沙箱主要是一种安全机制,把一些不信任的代码运行在沙箱之内,不能访问沙箱之外的代码。比如在线编辑器、执行第三方js、vue服务端渲染等,只要是运行不信任的程序,沙箱隔离就会使用到。...而es6的proxy则可以解决这个问题,proxy可以设置访问拦截器,于是with再加上proxy几乎完美解决js沙箱机制。...这是目前js沙箱能做到的最好的沙箱机制了,很多会再加上iframe去做更多的限制,因为H5提出了iframe的sandbox属性,限制了更多,也可以进行配置解决这些限制。当然,想要绕过方法还是有的。...而nodejs沙箱就很简单了,直接用内部提供的VM Module就可以了。感兴趣可以自己去查一查。 其实沙箱问题很多,解决修复这些方法也很多,感觉就是一堆大佬在博弈。...这边想提一嘴,微前端概念其实就是用js创造一个类似iframe的沙箱,解决隔离问题,分别运行各个项目。所以现在沙箱使用也不一定都是安全机制,也会因为功能需求使用。常见的有快照沙箱和proxy沙箱

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

说说JS中的沙箱

沙箱设计的目的是为了让不可信的代码运行在一定的环境中,从而限制这些代码访问隔离区之外的资源。 JS沙箱的使用场景 前端JS中也会有应用到沙箱的时候,毕竟有时候你要获取到的是第三方的JS文件或数据?...1、jsonp:解析服务器所返回的jsonp请求时,如果不信任jsonp中的数据,可以通过创建沙箱的方式来解析获取数据;(TSW中处理jsonp请求时,创建沙箱来处理和解析数据); 2、执行第三方js:...当你有必要执行第三方js的时候,而这份js文件又不一定可信的时候; 3、在线代码编辑器:相信大家都有使用过一些在线代码编辑器,而这些代码的执行,基本都会放置在沙箱中,防止对页面本身造成影响;                                      ...总而言之:当你要解析或执行不可信的JS的时候,当你要隔离被执行代码的执行环境的时候,当你要对执行代码中可访问对象进行限制的时候,沙箱就派上用场了。...通过runInNewContext返回沙箱中的构造函数Function,同时传入切断原型链的空对象防止逃逸,之后再外部使用的时候,只需要调用返回的这个函数,和普通的new Function一样调用即可。

2.5K30

你不知道的JS 沙箱隔离

另外一种值得借鉴的思路是阿里云开发平台的 Browser VM,其核心入口逻辑在 Context.js 文件中。...其他诸如 Web Worker 无法访问页面全局变量和函数、无法调用 alert、confirm 等 BOM API 等问题,相对于无法访问 window、document 全局对象已经是小问题了。...不过可喜的是,Web Worker 中可以正常使用 setTimeout、setInterval 等定时器函数,也仍能发送 ajax 请求。...其在 common/channel.js 中统一封装了子线程和主线程互相通信的接口和序列化通信数据的接口,然后我们可以看到其在 Worker 下实现 DOM 逻辑处理的总入口文件在 worker 目录下...,从该入口文件顺藤摸瓜,可以看到其实现了计算 DOM 后通过 postMessage 通知主线程进行渲染的入口文件 WorkerBridge.js 以及其他基于 React 库实现的 DOM 构造、Diff

1.9K40

微前端01 : 乾坤的Js隔离机制(快照沙箱、两种代理沙箱

下文会分三部分来进行讲解: 乾坤Js隔离机制的发展史; 编码实现三种Js隔离机制的核心逻辑,并分析各自的优劣; 分析乾坤的三种Js隔离机制的源代码,并深入细节进行解析; 1、乾坤Js隔离机制的发展史...我们把Js隔离机制常常称作沙箱,事实上,乾坤有三种Js隔离机制,并且在源代码中也是以 SnapshotSandbox、LegacySandbox、ProxySandbox三个类名来指代三种不同的隔离机制...下文我们统一以快照沙箱、支持单应用的代理沙箱、支持多应用的代理沙箱,来代表这三种不同的Js隔离机制。那么问题来了,隔离就隔离,怎么有这么多沙箱?...其实到了这里,如果读者朋友已经理解了上面的思路,就可以说已经理解了乾坤的Js隔离机制。下面我们来看看乾坤的源码具体是怎么实现的这三个沙箱机制。...filter的第1个参数是一个函数,第二个参数是一个对象。具体参数的含义可以查阅相关文档。这里之所以提出来,就是里面巧妙地运用了这个this。通过在this上设置属性,并以之为条件来实现去重功能。

2K20

微前端03 : 乾坤的沙箱容器分析(Js沙箱机制建立后的具体应用)

“在微前端01 : 乾坤的Js隔离机制(快照沙箱、两种代理沙箱)中,我们知道了乾坤的沙箱的核心原理和具体实现。...” 沙箱容器的主逻辑 对沙箱机制的具体应用,本质上就是对沙箱容器的控制,至于什么是沙箱容器,我们直接看代码: // 代码片段一,所属文件:src/sandbox/index.ts /** * @param...关于沙箱实例,我们先看创建沙箱实例的时候传入了globalContext,还记得我们在微前端01 : 乾坤的Js隔离机制(快照沙箱、两种代理沙箱)中各沙箱的极简版吧,当时我直接用的window,那为什么在真实源码中要通过传入...map((patch) => patch()); } 函数patchAtBootstrapping只做了一件事情,就是根据不同的沙箱类型,执行后并以数组的形式返回执行结果。为什么是数组类型呢?...就这个方法本身而言,直接返回函数值没有任何问题,因为从代码中可以看出,不管何种沙箱类型,在patchAtBootstrapping中,都只执行了一个函数

75120

谈谈微前端领域的js沙箱实现机制

| 导语  在过去,浏览器沙箱(sandbox)主要应用在前端安全领域,随着应用架构复杂,微前端方案的出现,js运行环境沙箱在浏览器中的需求越来越多。...特别是近几年比较火的微前端领域,js沙箱是其比较核心一个技术点,是整个微前端方案的实现的关键点之一。...传统的js沙箱主要用于执行一些不可信任的js脚本,其对沙箱的包装只需要一个可执行的js环境即可,一般会屏蔽对location document等重要全局对象的访问,同时一般为一次性执行,执行完第三方脚本后会释放沙箱环境...主流实现方案 一个js沙箱是一个独立的执行上下文或者叫作用域,我们把代码传入后,其执行不会影响到其他的沙盒环境。所以实现沙盒的第一步就是创建一个作用域。这个作用域不会包含全局的属性对象。...总结 传统的js沙箱注意是考虑的安全领域,锁定不信任脚本的执行,防止全局变量的获取与修改等。

5.7K72

再谈沙箱:前端所涉及的沙箱细讲

JS沙箱的使用场景前端JS中也会有应用到沙箱的时候,毕竟有时候你要获取到的是第三方的JS文件或数据?而这数据又是不一定可信的时候,创建沙箱,做好保险工作尤为重要。...js的时候,而这份js文件又不一定可信的时候;在线代码编辑器:相信大家都有使用过一些在线代码编辑器,而这些代码的执行,基本都会放置在沙箱中,防止对页面本身造成影响,例如:https://codesandbox.io...当你调用postMessageAPI传递数据给子页面的时候,传输的数据对象本身已经通过结构化克隆算法复制借助立即执行函数或闭包函数// jQuery当中的沙箱模式(function (win) {// ...(window)为什么要使用立即执行函数表达式(IIFE),因为IIFE不会在外界暴露任何的全局变量,但是又可以形成一个封闭的空间,刚好可以实现沙箱模式。但是这个沙箱还是可以访问或修改外部环境变量。...攻击,注入第三方代码;由于在内部定义执行的函数代码逻辑,仍然会沿着作用于链查找,为了绕开作用域链的查找,笔者通过访问箭头函数的constructor的方式拿到了构造函数Function,这个时候,Funtion

1.2K10

前端技术探索 - 你不知道的JS 沙箱隔离

另外一种值得借鉴的思路是阿里云开发平台的 Browser VM,其核心入口逻辑在 Context.js 文件中。...其他诸如 Web Worker 无法访问页面全局变量和函数、无法调用 alert、confirm 等 BOM API 等问题,相对于无法访问 window、document 全局对象已经是小问题了。...不过可喜的是,Web Worker 中可以正常使用 setTimeout、setInterval 等定时器函数,也仍能发送 ajax 请求。...其在 common/channel.js 中统一封装了子线程和主线程互相通信的接口和序列化通信数据的接口,然后我们可以看到其在 Worker 下实现 DOM 逻辑处理的总入口文件在 worker 目录下...,从该入口文件顺藤摸瓜,可以看到其实现了计算 DOM 后通过 postMessage 通知主线程进行渲染的入口文件 WorkerBridge.js 以及其他基于 React 库实现的 DOM 构造、Diff

1.6K30

JS函数

(){ console.log("hello js") } sayHello() 参数 形式参数 : 在函数声明时, 设置的参数。...//带参数的函数声明 function 函数名(形参1, 形参2, 形参...){ //函数体 } //带参数的函数调用 函数名(实参1, 实参2, 实参3); 计算2个数的和 ...函数作用域 :在 函数内的区域 叫做函数作用域,在函数作用域内声明的变量叫做局部变量 ,局部变量只有在当前函数内才能访问到。...预解析 js执行代码分为两个过程: 预解析过程(变量与函数提升) 代码一行一行执行 console.log(num); var num = 1 console.log(num) 预解析过程 把var声明的变量提升到当前作用域最前面...把函数声明提升到当前作用域的最前面。 如果函数同名 , 后者会覆盖前者 。 如果var声明的和函数声明的同名, 函数优先。

11.1K40

JS函数

函数定义        函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块;       函数就是包裹在花括号中的代码块       function 函数名()       {        ...这里是要执行的代码      } 二 函数的声明和调用    函数的声明必须使用关键字function    关键词 function 必须是小写的,并且必须以与函数名称相同的大小写来调用函数    函数本身不会自动运行...,只有当调用该函数时,才会执行函数内的代码    函数可以通过其名字加上括号中的参数进行调用 三 带有返回值的参数      使用return 语句来返回值 可以将返回值赋值给一个变量,然后对变量进行操作...四 arguments对象    在函数代码中,使用特殊对象 arguments存储函数调用传递给该函数的所有参数   可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length...sun+=arguments[i]; } return sun; } var s= sum(2,3,4,5);//虽然sum函数时没有参数的

5.2K20

带返回值的函数,闭包,沙箱,递归详解

函数进阶 函数的定义方式 函数声明 函数表达式 new Function 函数声明 function foo () { } 函数表达式 var foo = function () { } 函数声明与函数表达式的区别...函数声明必须有名字 函数声明会函数提升,在预解析阶段就已创建,声明前后都可以调用 函数表达式类似于变量赋值 函数表达式可以没有名字,例如匿名函数 函数表达式没有变量提升,在执行阶段创建,必须在表达式执行之后才可以调用...() { console.log(2) } } 函数的调用方式 普通函数 构造函数 对象方法 函数内 this 指向的不同场景 函数的调用方式决定了 this 指向的不同: 调用方式 非严格模式...例如: fun.apply(this, ['eat', 'bananas']) bind bind() 函数会创建一个新函数(称为绑定函数),新函数与被调函数(绑定函数的目标函数)具有相同的函数体(在...i++) { setTimeout(function () { console.log(i) }, 0) } console.log(222) 示例3:投票 示例4:判断类型 示例5:沙箱模式

1.8K21

JS函数hook

前言​ 我在阅读《JavaScript 设计模式与开发实践》的第 15 章 装饰者模式,突然发现 JS 逆向中 hook 函数js 中的装饰者模式有点像,仔细阅读完全篇后更是对装饰器与 hook...书中给的例子想说明的,想为某个原函数(比如这里的 add)添加一些功能,但该原函数可能是由其他开发者所编写的,那么直接修改原函数本身将可能导致未知 BUG,于是便可以用上面的方式进行复写原函数的同时,还不破坏原函数...this 指向问题​ 但并不是什么函数都能这样操作,或者说这样操作会导致原本函数可能执行不了,比如 this 指向,虽说没有修改原函数,但是原函数的 this 已经给我们更改成当前环境下(如window...,而后者通过函数原型链将参数与结果通过回调函数的形式进行使用。...在不考虑 this 指向,我个人更偏向第一种写法,而第二种写法也确实让我眼前一亮,很巧妙的使用 js 的原型链,从而避免 this 指向的问题。

3.4K10
领券