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

JavaScript中沙箱机制探秘

前言 最近有需求要研究下开放给用户自动化工具,于是就顺便整理了下沙箱相关问题。Sandbox,中文称沙箱或者沙盘,在计算机安全中是个经常出现名词。...然而在这样沙箱中,用户也可以无节制地使用一些全局变量如window、document等,因此YUI沙箱事实上是靠“规约”来约束,本质上并不是完全意义沙箱。...用户如果能够按照规约来处理代码,仍然可以享受他=它带来安全机制。关于这一观点以及模拟YUI沙箱实现,可参见周爱民先生漫谈B端沙箱技术。 iframe 那么如何才能真正地隔离执行环境呢?...Nodejs中沙箱 服务器端中,nodejs也提供了VM模块来对js代码进行独立编译和运行,我们也可以利用这个模块来实现沙箱。...总结 随着技术日新月异,JavaScript沙箱机制也将日趋完善,而用户在平台上获得更多自由操作空间同时也无需担心其他用户应用干扰,这或许将带来更多新奇、实用平台业务。

2.8K31

JavaScript中沙箱机制探秘:iFrame沙箱实现方案详解

jsFiddle实例研究 前文中我们只是概述了iframe沙箱基本原理并且提供了一种简单实现方式,在本篇中,我们将结合jsFiddle实例探讨更详细实现方案。 ?...最后,执行第三方输入iframe和host不在一个域触发了浏览器跨域机制,避免了很多风险,然而仍然存在一些潜在风险,如iframe里内容还是可以navigate到不同站点,并且自动运行一些plugin...HTML5带来iframesandbox属性为iframe安全机制提供了规范,在添加了sandbox属性后,默认将禁止iframe中内容执行脚本、提交表单、访问本地文件、运行插件、导航等各种风险行为...现在,我们把沙箱运行服务器和主站服务器(Host)放在不同域下,由于跨域文档隔离,Host与沙箱内部环境之间无法直接操作文档流,当沙箱内部需要向外发送HTTP请求或者从Host处获取用户信息时,我们便需要一套通信机制来解决问题...总结 在本篇文章中,我们分析了jsFiddle实现沙箱方法,以及常用sandbox与Host间通信方案。

4.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JVM系列(四):沙箱安全机制笔记

    今天主要给大家分享JVM沙箱安全机制笔记,希望对大家能有所帮助! 1、沙箱机制概念 Java安全模型核心就是Java沙箱(sandbox)。...沙箱机制就是将Java代码限定只能在虚JVM虚拟机中特定运行范围,并且严格限制代码对本地系统资源访问,通过这样方式来保证对Java代码有效隔离,防止对本地操作系统造成破坏。...2、沙箱作用 主要限制系统资源(CPU、内存、文件系统、网络)访问。 不同级别的沙箱对系统资源访问限制也有差异。 3、本地代码和远程代码 Java执行程序分为:本地代码和远程代码。..., 本地代码:默认视为可信任,可以访问一切本地资源。 远程代码:被看作是不受信。对于授信本地代码,对于非授信远程代码在早期Java实现中,安全依赖于沙箱(Sandbox)机制。...5、沙箱安全机制基本组件 5.1 字节码校验器(bytecode verifier) 确保lava类文件遵循lava语言规范。这样可以帮助Java程序实现内存保护。

    1.4K30

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

    “在微前端01 : 乾坤Js隔离机制(快照沙箱、两种代理沙箱)中,我们知道了乾坤沙箱核心原理和具体实现。...本文将会详细讲解乾坤对沙箱具体应用。...” 沙箱容器主逻辑 对沙箱机制具体应用,本质上就是对沙箱容器控制,至于什么是沙箱容器,我们直接看代码: // 代码片段一,所属文件:src/sandbox/index.ts /** * @param...关于沙箱实例,我们先看创建沙箱实例时候传入了globalContext,还记得我们在微前端01 : 乾坤Js隔离机制(快照沙箱、两种代理沙箱)中各沙箱极简版吧,当时我直接用window,那为什么在真实源码中要通过传入...proxy实际上就是在上文代码片段一中创建沙箱实例,对应代码片段一中sandbox变量。

    84120

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

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

    2.5K20

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

    | 导语  在过去,浏览器沙箱(sandbox)主要应用在前端安全领域,随着应用架构复杂,微前端方案出现,js运行环境沙箱在浏览器中需求越来越多。...微前端对于沙箱诉求 沙箱在微前端架构中不是必须要做事情,因为如果规范做足够好,是能够避免掉一些变量冲突读写,CSS 样式冲突情况。...传统js沙箱主要用于执行一些不可信任js脚本,其对沙箱包装只需要一个可执行js环境即可,一般会屏蔽对location document等重要全局对象访问,同时一般为一次性执行,执行完第三方脚本后会释放沙箱环境...需要同时支持多个沙箱环境存在,每个沙箱需要有加载、卸载、再次恢复能力,其对应着微应用运行生命周期。 在主流微前端方案中,有一个关键点决定了沙箱如何做:同一时刻是单实例还是多实例存在宿主应用中。...,通过沙箱active 和inactive方案来激活或者卸载沙箱,达到更新window环境目的。

    5.9K72

    java 安全沙箱模型详解

    通过这趟检查,可以过滤掉大部分可能损坏,或者压根就不是class文件,来冒充装载。 第二趟是,检查它是否符合java语言特性里编译规则。比如发现一个类超类不是Object,就抛出异常。...jvm类型安全特性 这些都是基础java语言特性,他们降低了java程序出现内存混乱,崩溃几率。...结构化内存访问(不使用指针,一定程度上让黑客无法篡改内存数据) 自动垃圾收集 数组边界检查 空引用检查 数据类型安全 Java api安全管理器 securityManager 这是安全沙箱中,离我们程序员最接近一环...securityMananger,是一个api级别的,可自定义安全策略管理器,它深入到java api中,在各处都可以见到它身影。比如SecurityClassLoader。...java签名/证书机制 java签名/证书机制,可以保障使用者,安全地调用外部提供jar,防止你信任jar被篡改。 首先,java签名,必须是基于jar包

    80440

    浅谈JVM(一) ClassLoader双亲委派和沙箱机制

    运行在操作系统之上,与计算机硬件没有交互 JVM整体运行流程需要用到资源 可以说分以下标红5部分组成 class files 被java命令运行 将类信息通过类装载器(ClassLoader)加载并初始化生成...Engine)负责从java栈中取得命令解释成操作系统可识别命令,并交给操作系统执行 本地接口(Native Interface)和本地方法库  融合了别的编程语言(C/C++)为java所用,java...用户自定义类加载器 继承 java.lang.ClassLoader类实现里面的方法,自定义加载类方法 双亲委派机制 双亲委派模型式作过程是:如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类...沙箱机制 沙箱机制是由基于双亲委派机制上 采取一种JVM自我保护机制,假设你要写一个java.lang.String 类,由于双亲委派机制原理,此请求会先交给Bootstrap试图进行加载,但是...Bootstrap在加载类时首先通过包和类名查找rt.jar中有没有该类,有则优先加载rt.jar包中类,因此就保证了java运行机制不会被破坏.

    31610

    保卫 Java 应用程序安全沙箱机制你需要了解一下

    = null) { security.checkRead(path); } ... } } 这明显是一个安全检查代码,检查是你是否有访问磁盘路径权限,为什么 Java...Java 编写不只是服务端应用程序,它还可以作为客户端跑在浏览器上(Applet),它还可以以 app 形式跑在手机上(J2ME),针对不同平台 JVM 会使用不同安全策略。...待 Java 安全检查通过后执行具体 IO 操作时,操作系统还会继续进行权限检查。...沙箱安全检查点非常多,下面列举一些常见场景 文件操作 套接字操作 线程和线程组 类加载器控制 反射控制 线程堆栈信息获取 网络代理控制 Cookie 读写控制 如果你服务端程序开启了安全检查,就需要在...这点有点类似 Android 应用权限设置,在每个 Android 应用配置文件里都需要罗列出一系列应用子权限。不过用 Java 来编写服务端程序似乎开启安全检查没有任何必要。

    63330

    JVM系列(1) JVM内存模型,双亲委派机制沙箱安全机制

    JVM所处位置:从下图可以看出JVM 是运行在操作系统之上,与硬件没有直接交互 JVM结构图体系 堆(Heap) Java堆(Java Heap)是Java虚拟机所管理内存中最大一块。...根据Java虚拟机规范规定,Java堆可以处于物理上不连续内存空间中,只要逻辑上是连续即可,就像我们磁盘空间一样。...ClassNotFoundException异常,世纪上就是双亲委派机制,下面就说 双亲委派机制 如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上...,就交给AppClassLoader来加载,如果AppClassLoader也没有,就报ClassNotFoundException(); 沙箱安全:防止恶意代码污染java源代码 比如我定义了一个类名为...String所在包为java.lang,因为这个类本来是属于jdk,如果没有沙箱安全机制的话,这个类将会污染到我所有的String,但是由于沙箱安全机制,所以就委托顶层bootstrap加载器查找这个类

    26620

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

    沙箱或称沙盒,即sandbox,顾名思义,就是让程序跑在一个隔离环境下,不对外界其他程序造成影响,外界无法修改该环境内任何信息,沙箱东西单独属于一个世界,通过创建类似沙盒独立作业环境,在其内部运行程序并不能对硬盘产生永久性影响...沙箱设计目的是为了让不可信代码运行在一定环境中,从而限制这些代码访问隔离区之外资源。浏览器上JavaScript就是在沙盒中执行,严格控制环境。沙箱将JavaScript与桌面世界隔离开来。...JS中沙箱使用场景前端JS中也会有应用到沙箱时候,毕竟有时候你要获取到是第三方JS文件或数据?而这数据又是不一定可信时候,创建沙箱,做好保险工作尤为重要。...总而言之:要解析或执行不可信JS时候,要隔离被执行代码执行环境时候,要对执行代码中可访问对象进行限制时候如何实现/使用沙箱实现沙箱最方便模式iframe,同理,也可以使用webWorker。...  // 所以我们选择使用传参形式将 window对象 传入沙箱内  // 此时沙箱内使用window对象时候,不会再去全局搜索window对象  // 而使用就是沙箱内部定义形参  win.itCast

    1.5K10

    JAVA安全之FreeMark沙箱绕过研究

    Outside The Lines Of Template"给出相关沙箱绕过方式 防御措施 Freemarker存在编辑模板功能时为了防止模板注入通常会使用Configuration.setNewBuiltinClassResolver...沙箱绕过 2.3.30以下 根据Pwntester 2020年议题"Room For Escape Scribbling Outside The Lines Of Template"可以发掘两个在2.3.30...以下绕过沙箱payload: 方式1:绕过class.getClassloader反射加载Execute类 我们可以使用java.security.protectionDomaingetClassLoader...payload,替换payload中object为archive插入载荷: 随后访问归档页面即可触发恶意载荷: 方式2:Spring Beans可用时直接禁用沙箱 此payload需要freemarker...DefaultMemberAccessPolicy,但是漏洞防护需要同时配置new-builtin-class-resolver,否则用最开始payload即可攻击,在这里我们使用上面的沙箱绕过载荷做一个测试

    8620

    Java机制

    引入jol工具包,它可以把java对象在jvm内存中布局情况打印出来,看一下对象在jvm中是怎么存在 org.openjdk.jol</groupId...System.err.println(ClassLayout.parseInstance(object).toPrintable()); } } } 执行结果,java...锁就实在对象markword中记录一个锁状态,加锁前和加锁后只有markword发生了改变 锁状态编码:偏向锁、轻量锁、重量锁对应不同状态 轻量级锁也叫自旋锁,不会进行线程挂起,而是一直在自旋查看锁是否被释放...重量级锁是由操作系统进行介入,在锁被使用时候将其他线程进行阻塞挂起,锁被释放时又进行唤醒竞争,上下线程切换造成资源内耗要比轻量级锁多得多 偏向锁默认是不打开,在阻塞4秒后进行打开 如何保证

    23730

    JavaIO机制

    javaIO机制主要分为BIO,NIO,AIO 一 BIO Block-IO:InputStream和OutputStream,Reader和Writer 1.1 BIO建立连接 服务端创建一个...(这可不就是同步么) 1.2 BIO请求回复过程 BIO基于流模型实现,交互方式是同步阻塞,读写线程完成之前会一直阻塞 应用程序发起请求时候,程序线程陷入阻塞状态等待返回数据 1.3 BIO坑...这种方式最大坑在于,每次一个客户端接入,都是要在服务端创建一个线程来服务这个客户端,这会导致大量客户端时候,服务端线程数量可能达到几千甚至几万,几十万,这会导致服务器端程序负载过高,有比较高风险...同步指的是在这个处理过程中,我们还是要先读取数据,处理,再返回,这个地方是个同步过程。...2.4 NIO核心 NIO中select,poll,epoll区别.png 三 AIO AIO demo 各IO机制对比与选型 BIO适合连接数小且固定架构,对服务器资源要求比较高

    23330

    Java内存机制

    分配给它内存会被回收),Java 会自动释放掉为该变量分配内存空间,该内存空间可以立即被另作它用。   ...堆内存用来存放由 new 创建对象和数组,在堆中分配内存,由 Java 虚拟机自动垃圾回收器来管理。...这也是 Java 比较占内存原因,实际上,栈中变量指向堆内存中变量,这就是 Java指针! 代码实例Test01:单个对象创建 ?...注意点: Java本身提供垃圾收集机制(Garbage Collection,GC),会不定期施放不用内存空间,只要对象不用了,就会等待GC释放空间,如上面堆内存中name="李四";age=33。...java中常用内存区域 在java中主要存在4块内存空间,这些内存名称及作用如下: 栈内存空间:保存所有的对象名称(更准确地说是保存了引用堆内存空间地址) 堆内存空间:保存每个对象具体属性内容

    55900

    Java反射机制

    介绍反射机制Java 反射机制允许在程序运行期间,借助反射 API 获取类内部信息,并能直接操作对象内部属性及方法。...---Java 反射机制提供功能:在运行时,使用反射分析类能力,获取有关类一切信息(类所在包、类实现接口、标注注解、类数据域、类构造器、类方法等)在运行时,使用反射分析对象,设置实例域值...反射机制允许你调用任意方法(类构造器方法、类成员方法 等)---反射是一种功能强大且复杂机制。使用反射机制主要人员是工具构造者,而不是应用程序员。...只有利用 get() 方法才能得到可访问域值。除非拥有访问权限,否则 Java 安全机制只允许査看任意对象有哪些域,而不允许读取它们值。反射机制默认行为受限于 Java 访问控制。...他们认为 Java 提供接口(interface)是一种更好解决方案。然而,反射机制允许你调用任意方法。

    20720

    JavaSPI机制

    spi机制浅谈 javaSPI机制 1 SPI机制简介 SPI全名为Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件。...在java.util.ServiceLoader文档里有比较详细介绍。简单总结下java spi机制思想。...一旦代码里涉及具体实现类,就违反了可拔插原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配时候能不在程序里动态指明,这就需要一种服务发现机制。...java spi就是提供这样一个机制:为某个接口寻找服务实现机制。有点类似IOC思想,就是将装配控制权移到程序之外,在模块化设计中这个机制尤其重要。...jdk提供服务实现查找一个工具类:java.util.ServiceLoader java.util.ServiceLoader使用 今天在看Hadoop源代时候发现,在FileSystem中用到了

    30430

    Java内存机制

    分配给它内存会被回收),Java 会自动释放掉为该变量分配内存空间,该内存空间可以立即被另作它用。...堆内存用来存放由 new 创建对象和数组,在堆中分配内存,由 Java 虚拟机自动垃圾回收器来管理。...这也是 Java 比较占内存原因,实际上,栈中变量指向堆内存中变量,这就是 Java指针!...注意点: Java本身提供垃圾收集机制(Garbage Collection,GC),会不定期施放不用内存空间,只要对象不用了,就会等待GC释放空间,如上面堆内存中name="李四";age=33...java中常用内存区域 在java中主要存在4块内存空间,这些内存名称及作用如下: 栈内存空间:保存所有的对象名称(更准确地说是保存了引用堆内存空间地址) 堆内存空间:保存每个对象具体属性内容

    56120

    说说JS中沙箱

    沙箱设计目的是为了让不可信代码运行在一定环境中,从而限制这些代码访问隔离区之外资源。 JS中沙箱使用场景 前端JS中也会有应用到沙箱时候,毕竟有时候你要获取到是第三方JS文件或数据?...2、借助iframe实现沙箱 前面介绍一种劣质、不怎么安全方法构造了一个简单沙箱,但是在前端最常见方法,还是利用iframe来构造一个沙箱,such as 在线代码编辑器中:https://codesandbox.io...这种方式更为方便、简单、安全,也是目前比较通用前端实现沙箱方案,假如你要执行代码不是自己写代码,不是可信数据源,那么务必要使用iframe沙箱。...3、nodejs中沙箱 nodejs中使用沙箱很简单,只需要利用原生vm模块,便可以快速创建沙箱,同时指定上下文。...总结 即使我们知道了如何在开发过程中使用沙箱来让我们执行环境不受影响,但是沙箱也不一定是绝对安全,毕竟每年都有那么多黑客绞尽脑汁钻研出如何逃出浏览器沙箱和nodejs沙箱,因此笔者个人建议: 1、业务代码上不执行不可信任第三方

    2.6K30
    领券