艾巴生活网

您现在的位置是:主页>科技 >内容

科技

沙箱的工作机制是什么_什么是沙箱机制

2024-08-09 14:34:53科技帅气的蚂蚁
大家可能都听说过以太坊上的智能合约是在沙盒中运行的。那么到底什么是沙盒呢?1 为什么需要沙盒机制?默认情况下,应用程序可以访问机器上

沙箱的工作机制是什么_什么是沙箱机制

大家可能都听说过以太坊上的智能合约是在沙盒中运行的。那么到底什么是沙盒呢?

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

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

然而,这并不安全。如果随意操纵资源,可能会破坏其他应用程序正在使用的资源,或者导致数据泄漏。为了解决这个问题,一般有以下两种解决方案:

(1)给程序分配一个权限有限的账号:利用操作系统的权限管理机制对其进行限制。

(2)为程序提供有限的运行环境:这就是沙箱机制。

2.什么是沙盒机制?

如上所述,沙箱是限制应用程序访问系统资源的操作环境。

沙盒通常在虚拟机(VM)中实现,如Java的虚拟机JVM,Javascript的虚拟机V8引擎,Android的虚拟机Dalvik/ART,以太坊的虚拟机EVM。具体实现方式不一样。本文重点研究了JVM和EVM的沙盒机制实现。

3.3的沙盒机制。虚拟机(Java Virtual Machine的缩写)

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

级别1:类装入器

采用父委托的模式,下级类装入器收到类装入请求时,需要委托给上级类装入器区域完成,只有当上级类装入器无法完成请求时,才会再次委托给下级类装入器。通过这种机制,保证了系统的核心类不会被篡改,恶意代码无法访问关键资源。

第2层:字节码检查器

字节码加载后,需要进行字节码级别的检查,包括以下内容:

(1)变量在使用前应该初始化。

(2)方法调用应该匹配之前的对象引用类型。

(3)未违反访问私有数据和方法的规则。

(4)对局部变量的访问属于运行时堆栈。

(5)运行时堆栈不会溢出。通过这种机制,可以保证字节码符合Java语言规范,避免无效访问或越界访问。

第三层:安全经理

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

$ JAVA _ HOME/conf/security/JAVA . security

$ JAVA _ HOME/conf/security/JAVA . policy

默认情况下,安全管理器是不打开的,因此您可以在命令行中添加一个参数来打开它:

java -Djava.security.manager沙盒测试

默认安全策略配置不允许应用程序读取和写入文件,因此如果您尝试写入文件,运行时将报告以下错误:

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

然后在运行时指定此策略配置:

Java-DJ ava . security . manager-DJ ava . security . policy=./my.policy沙盒测试

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

4.4的沙盒机制。EVM

EVM本身是一个相对封闭的环境,不支持直接访问网络和文件系统。从这个角度来看,它起到了沙盒的作用:

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

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