售前客服二维码
文章均源于网络收集编辑侵删
提示:仅接受技术开发咨询!
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指令之间的区别:
来源:公共号码(DoraFans)
文章均源于网络收集编辑侵删
提示:仅接受技术开发咨询!