首页
学习
活动
专区
工具
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的时候,当你要隔离被执行代码的执行环境的时候,当你要对执行代码中可访问对象进行限制的时候,沙箱就派上用场了。...3、nodejs中的沙箱 nodejs中使用沙箱很简单,只需要利用原生的vm模块,便可以快速创建沙箱,同时指定上下文。

2.5K30

你不知道的JS 沙箱隔离

另外一种值得借鉴的思路是阿里云开发平台的 Browser VM,其核心入口逻辑在 Context.js 文件中。...其在 common/channel.js 中统一封装了子线程和主线程互相通信的接口和序列化通信数据的接口,然后我们可以看到其在 Worker 下实现 DOM 逻辑处理的总入口文件在 worker 目录下...,从该入口文件顺藤摸瓜,可以看到其实现了计算 DOM 后通过 postMessage 通知主线程进行渲染的入口文件 WorkerBridge.js 以及其他基于 React 库实现的 DOM 构造、Diff...操作、生命周期 Mock 接口等相关代码,而接受渲染事件通信的入口文件在 page 目录下,该入口文件接受 node 操作事件后再结合 WorkerDomNodeImpl.js 中的接口代码实现了 DOM...iframe 对象,然后将 DOM 下的操作都通过 postMessage 发送到主线程后,以与其绑定的 iframe 兑现来执行,同时,通过代理将具体的渲染实现再转发给原 WorkerDomNodeImpl.js

1.9K40

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

而资源隔离又分为Js资源隔离和css资源隔离,本文主要探索的是乾坤的Js资源隔离机制。...下文会分三部分来进行讲解: 乾坤Js隔离机制的发展史; 编码实现三种Js隔离机制的核心逻辑,并分析各自的优劣; 分析乾坤的三种Js隔离机制的源代码,并深入细节进行解析; 1、乾坤Js隔离机制的发展史...我们把Js隔离机制常常称作沙箱,事实上,乾坤有三种Js隔离机制,并且在源代码中也是以 SnapshotSandbox、LegacySandbox、ProxySandbox三个类名来指代三种不同的隔离机制...下文我们统一以快照沙箱、支持单应用的代理沙箱、支持多应用的代理沙箱,来代表这三种不同的Js隔离机制。那么问题来了,隔离就隔离,怎么有这么多沙箱?...其实到了这里,如果读者朋友已经理解了上面的思路,就可以说已经理解了乾坤的Js隔离机制。下面我们来看看乾坤的源码具体是怎么实现的这三个沙箱机制。

2.1K20

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

“在微前端01 : 乾坤的Js隔离机制(快照沙箱、两种代理沙箱)中,我们知道了乾坤的沙箱的核心原理和具体实现。...本文将会详细讲解乾坤对沙箱的具体应用。...” 沙箱容器的主逻辑 对沙箱机制的具体应用,本质上就是对沙箱容器的控制,至于什么是沙箱容器,我们直接看代码: // 代码片段一,所属文件:src/sandbox/index.ts /** * @param...该对象包括三个属性instance、mount、unmount,其中instace代表沙箱实例,mount、unmount是两个方法,供沙箱容器持有者在合适的时机进行调用。...关于沙箱实例,我们先看创建沙箱实例的时候传入了globalContext,还记得我们在微前端01 : 乾坤的Js隔离机制(快照沙箱、两种代理沙箱)中各沙箱的极简版吧,当时我直接用的window,那为什么在真实源码中要通过传入

78220

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

| 导语  在过去,浏览器沙箱(sandbox)主要应用在前端安全领域,随着应用架构复杂,微前端方案的出现,js运行环境沙箱在浏览器中的需求越来越多。...特别是近几年比较火的微前端领域,js沙箱是其比较核心一个技术点,是整个微前端方案的实现的关键点之一。...传统的js沙箱主要用于执行一些不可信任的js脚本,其对沙箱的包装只需要一个可执行的js环境即可,一般会屏蔽对location document等重要全局对象的访问,同时一般为一次性执行,执行完第三方脚本后会释放沙箱环境...Node 中 有 vm 模块,来实现类似的能力,在浏览器中我们可以利用了闭包的能力,利用变量作用域去模拟一个沙箱上下文环境,比如下面的代码: function sandbox(global) {  console.log...总结 传统的js沙箱注意是考虑的安全领域,锁定不信任脚本的执行,防止全局变量的获取与修改等。

5.8K72

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

JS沙箱的使用场景前端JS中也会有应用到沙箱的时候,毕竟有时候你要获取到的是第三方的JS文件或数据?而这数据又是不一定可信的时候,创建沙箱,做好保险工作尤为重要。...jsonp:解析服务器所返回的jsonp请求时,如果不信任jsonp中的数据,可以通过创建沙箱的方式来解析获取数据;(TSW中处理jsonp请求时,创建沙箱来处理和解析数据);、执行第三方js:当你有必要执行第三方...js的时候,而这份js文件又不一定可信的时候;在线代码编辑器:相信大家都有使用过一些在线代码编辑器,而这些代码的执行,基本都会放置在沙箱中,防止对页面本身造成影响,例如:https://codesandbox.io...总而言之:要解析或执行不可信的JS的时候,要隔离被执行代码的执行环境的时候,要对执行代码中可访问对象进行限制的时候如何实现/使用沙箱实现沙箱最方便的模式iframe,同理,也可以使用webWorker。...://my.oschina.net/ivweb/blog/872949说说JS中的沙箱 https://segmentfault.com/a/1190000020463234JavaScript 沙箱模式

1.3K10

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

另外一种值得借鉴的思路是阿里云开发平台的 Browser VM,其核心入口逻辑在 Context.js 文件中。...其在 common/channel.js 中统一封装了子线程和主线程互相通信的接口和序列化通信数据的接口,然后我们可以看到其在 Worker 下实现 DOM 逻辑处理的总入口文件在 worker 目录下...,从该入口文件顺藤摸瓜,可以看到其实现了计算 DOM 后通过 postMessage 通知主线程进行渲染的入口文件 WorkerBridge.js 以及其他基于 React 库实现的 DOM 构造、Diff...操作、生命周期 Mock 接口等相关代码,而接受渲染事件通信的入口文件在 page 目录下,该入口文件接受 node 操作事件后再结合 WorkerDomNodeImpl.js 中的接口代码实现了 DOM...iframe 对象,然后将 DOM 下的操作都通过 postMessage 发送到主线程后,以与其绑定的 iframe 兑现来执行,同时,通过代理将具体的渲染实现再转发给原 WorkerDomNodeImpl.js

1.7K30

JS通用模块写法

模块化这个问题并非一开始就存在,WWW 刚刚问世的时候,html,JavaScript,CSS(JS 和 CSS 都是后来在网景被引进浏览器的)都是极其简单的存在,不需要模块化。...在 ES6 以前,JS 语言没有模块化,如何让 JS 不止运行在浏览器,且能更有效的管理代码, 于是应运而生 CommonJS 这种规范,定义了三个全局变量: require,exports,module...require 用于引入一个模块 exports 对外暴露模块的接口,可以是任何类型 module 是这个模块本身的对象 用 require 引入时获取的是这个模块对外暴露的接口(exports) Node.js...我们要实现一个模块,让它既能在 seajs(CMD)环境里引入,又能在 requirejs(AMD)环境中引入,当然也能在 Node.js(CommonJS)中使用,另外还可以在没有模块化的环境中用 script...然后还要满足 script 标签全局引入,我们可以将模块放在 window 上,为了模块内部在浏览器和 Node.js 中都能使用全局对象,我们可以做此判断: var global = typeof window

2K10

qiankun proxySand 沙箱

qiankun 内为微应用实现了沙箱机制, 以实现js隔离的目的, 沙箱的重点在于初始化时对全局对象的copy 及代理 使用 const sand = new ProxySand(name) sand.active...() // 启动 sand.inacitve() // 关闭 属性 name 沙箱名 type 沙箱类型 Proxy proxy沙箱 Snapshot LegacyProxy 旧沙箱实现 sandboxRunning...沙箱是否运行中 proxy 全局对象的proxy副本, 沙箱实体 active 启动沙箱 inactive 关闭沙箱 实现 沙箱的实现过程都在 constructor 实例的创建中 设置初始值...// set 缓存数据 updatedValueSet.add(p); // 如果属性为 System, __cjsWrapper 模块加载器...`); } // 在 strict-mode 下,Proxy 的 handler.set 返回 false 会抛出 TypeError,在沙箱卸载的情况下应该忽略错误

1.7K10

js 模块化发展

2 内容概要 直接定义依赖 (1999): 由于当时 js 文件非常简单,模块化方式非常简单粗暴 —— 通过全局方法定义、引用模块。...但文章中的 JS模块化还不等于前端工程的模块化,Web 界面是由 HTML、CSS 和 JS 三种语言实现,不论是 CommonJS 还是 AMD 包括之后的方案都无法解决 CSS 与 HTML 模块化的问题...Http 2.0 对 js 模块化的推动 js 模块化定义的再美好,浏览器端的支持粒度永远是瓶颈,http 2.0 正是考虑到了这个因素,大力支持了 ES 2015 模块化规范。...一句话,模块化仍在路上。js 模块化的矛头已经对准了 css 与 html,这两位元老也该向前卫的 js 学习学习了。...未来 css、html 的模块化会自立门户,还是赋予 js 更强的能力,让两者的模块化依附于 js 的能力呢?

2.1K20

js模块化例子

最近在看一本书,里面提到js模块化,觉得很有必要,所以记录下来 Game.js /** * This is the main class that handles the game life cycle..._canvas.height); }; ---- boardRenderer.js /** * 这个类负责绘制,棋盘,球 * @param context the 2d context to draw..._rows; }; ---- boardModel.js /** * 这个类是负责保存/验证/返回当前游戏的状态 * 如当前的玩家是谁、每个单元格放的是什么球、 * 是不是谁赢了 * @param...this.reset(); } /** * 0代表单元格为空,1代表单元格有红色球,2代表单元格有绿色球 * 因为怕以后忘记这些数字代表什么,干脆把数字存到常量里,代码看起来易懂, * 但是这么多字,前端的js...* ps.变量名全大写表示这是常量,这是一个js程序员之间的约定,表达为 CAPITAL_CASED。

4.6K20
领券