https://m.qukuaiwang.com.cn/news/14003.html

大家也许都听说过:以太坊上的智能合约是在沙箱(Sandbox)中运行的。那么到底什么是沙箱呢?本文将带你揭开这一机制的神秘面纱。

1.为什么需要沙箱机制?

默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。

但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:

(1) 为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制
(2) 为程序提供一个受限的运行环境:这就是沙箱机制

2.什么是沙箱机制?

如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。

沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同,本文重点分析一下JVM和EVM的沙箱机制实现。

3.JVM的沙箱机制

JVM的沙箱机制大致可以分为三层:

第一层:类加载器

采用双亲委派模型,低层类加载器在收到类加载请求时,需要先委派给高层类加载器区完成,只有在高层类加载器无法完成该请求时,才会再重新委派给低层类加载器。通过这一机制,确保了系统的核心类不会被篡改,恶意代码无法访问关键资源。

第二层:字节码校验器

类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:

(1) 变量要在使用之前进行初始化
(2) 方法调用与对象引用类型之前要匹配
(3) 访问私有数据和方法的规则没有被违背
(4) 对本地变量的访问落在运行时堆栈内
(5) 运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。

第三层:安全管理器

这一层是交由应用开发者来维护的,开发者可以根据自身需求,制定对应的安全策略。默认的安全策略配置位于以下两个配置文件中:

· $JAVA_HOME/conf/security/java.security
· $JAVA_HOME/conf/security/java.policy

默认情况下安全管理器是不开启的,可以在命令行增加一个参数来开启它:

java -Djava.security.manager SandboxTest

默认的安全策略配置不允许应用程序对文件的读写操作,所以如果你试图写一个文件,运行时会报如下错误:

如果你希望开放这个权限,可以编写自己的安全策略文件,比如我们写一个my.policy:

然后在运行时指定这个策略配置就可以了:

java -Djava.security.manager -Djava.security.policy=./my.policy SandboxTest

应用开发者可以针对不同的应用场景进行精细化定制,控制程序对网络、文件、属性等内容的访问权限。

4.EVM的沙箱机制

EVM本身是一个相对封闭的环境,不支持对网络和文件系统的直接访问,从这个层面来说已经起到一部分沙箱的功能了:

另外,在智能合约之间互相调用时,EVM会重新分配堆栈和内存空间,在一个全新的环境中运行新合约,即使出现问题也不会破坏原有执行环境,从而为智能合约的执行提供了一个沙箱环境。

最后,每个智能合约的存储也是相互独立的,开发者可以根据需求,限制合约可以访问的存储空间,避免未授权的访问或修改。举例来说,下图就描述了CALL和CALLCODE指令对存储空间访问的区别:

浅析沙箱机制(Sandboxie)相关推荐

  1. java 沙箱机制_浅析沙箱机制(Sandboxie)

    每个人都可能听说过以太坊的智能合约正在沙盒中运行.那沙盘究竟是什么?本文将带您了解这种机制的奥秘. 1.为什么需要沙盒机制? 默认情况下,应用程序可以访问计算机上的所有资源,例如CPU,内存,文件系统 ...

  2. 沙箱机制(Sandboxie)

    一.沙箱是什么? 沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响,即沙箱提供一个限制该应用程序对系统资源的访问权限. 二.沙箱的应用 (1)搭建测 ...

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

    转载自 https://blog.csdn.net/start_lie/article/details/79016312 JVM(Java Virtual Machine)   java虚拟机 JVM ...

  4. 修改ffmpeg支持文件描述符,以适配android10沙箱机制

    问题背景 android10默认执行文件沙箱机制,native层代码失去了通过文件路径访问公共媒体文件的权限.当时可通过android:requestLegacyExternalStorage=&qu ...

  5. ios沙箱模式开启_iOS的沙箱机制 是否应该清理后台

    在这里不讨论iOS的封闭性,这些是手机厂商.应用程序开发者需要深入了解的,下面讨论的是iOS的沙箱机制,来了解它对我们个人用户所产生影响 什么是沙箱机制? ​ 每个APP都有自己的独立存储空间,安装的 ...

  6. 【ZeloEngine】沙箱机制

    [ZeloEngine]沙箱机制 沙箱,沙盒,Sandbox 沙盒游戏是指开放世界游戏,比如MineCraft,玩家可以在里面自由地游玩 程序的Sandbox,是指引擎提供一个干净的环境,供程序员自由 ...

  7. 结合案例浅析反射机制

    结合案例浅析反射机制 反射机制的概念 获取Class对象的三种方法 问题引入 反射实现对象拷贝 测试类(Dod) 实现拷贝(CopyDemo) 反射+注解模拟测试框架(Jnit) 注解类(Text) ...

  8. sandboxie (沙箱机制)

    转自:http://baike.baidu.com/link?url=jRWOO0X2SB3fSx9xnQq0LzdX69S-KeiOYv0wtScas2SZYUlXT5i1GuGUZnxdqlRvc ...

  9. java的沙盒安全模式_Java沙箱机制

    自从 Java 技术出现以来, 有关 Java 平台的安全性及由 Java 技术发展所引发的新的安全性问题,引起了越来越多的关注.目前,Java 已经大量应用在各个领域,研究 Java 的安全 性对于 ...

最新文章

  1. multiprocessing 多进程
  2. 该死的MySQL乱码!
  3. 漫画:什么是计数排序
  4. 自动化测试中自动化切换网络----解决方案
  5. 洛谷P3676 小清新数据结构题(动态点分治)
  6. java 获取键盘点击_Java中获取键盘输入值的三种方法介绍
  7. 利用工具,促进有效沟通
  8. Redis的安装教程(Windows+Linux)【超详细】
  9. 【CodeVS3372】选学霸
  10. vue生命周期的快速记忆方法
  11. free、detele与野指针
  12. BNN系列-Dropout as a Bayesian Approximation
  13. 基于java的网上鲜花销售系统,基于JAVA的鲜花销售管理系统MVC开发,免费分享
  14. 本地应用程序_本地化PHP应用程序的“正确方法”,第4部分
  15. 大数据都应用在哪些领域?
  16. [unity]使用Unity粒子系统制作跑尘
  17. 二见钟情——设计模式
  18. 先传递高八位,后传递低八位_高电子邮件可传递性的7个最佳SMTP服务提供商(2020)
  19. FINTERRA在2018年第二届远东商业领袖奖中脱颖而出
  20. 张文宏澄清年收入传言:读书不是唯一的路,却是人生最好走的路

热门文章

  1. 网盘系统|基于SpringBoot的网盘系统的设计与实现
  2. 写写leetcode剑指offer2刷完一遍之后的感受
  3. Android开发 指纹识别
  4. 扰动观测器(DOB)设计
  5. python键盘怎么输入双引号_如何在Python中使用字符串变量打印双引号?
  6. SqlServer 表分区
  7. 双引号后面要加句号吗_请问:用双引号的时候,一句话结尾的句号是放在引号里面还是外面......
  8. mysql 加写锁_MySQL中的读锁和写锁
  9. mysql系列文章目录导航
  10. 计算机软件的教学设计,计算机软件教学设计