目录

前言:为什么要用沙箱?能解决什么样的问题?

使用场景:

Docker的沙箱


 

前言:为什么要用沙箱?能解决什么样的问题?

场景:比如我们有一个应用程序可以访问机器上的所有资源:比如CPU,内存等等,但是这样肯定是不安全的,如果随意操作资源就可能破坏资源的使用,使其他使用资源的应用程序受到影响

解决:

1.为程序分配一个权限账号,操作系统的权限管理机制进行限制

2.为程序提供一个受限的环境:沙箱机制

所以说,什么是沙箱机制?

沙箱机制就是限定一个应用程序访问资源的运行环境

使用场景:

Springboot项目集成沙箱支付完成退款功能 沙箱机制jvm_安全策略

1.比如JVM,大致分为三层:

1.类加载器,利用双亲委派机制,先委派给高层类进行加载,当高层无法应付时交给下面的加载器(保证了系统的核心类不会被篡改,恶意代码无法访问关键资源)

Springboot项目集成沙箱支付完成退款功能 沙箱机制jvm_开发语言_02

 2.在类加载的链接时期中准备时期,中间有个字节码验证阶段,对字节码进行校验

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

 3.我们的开发者也具有设置安全策略的权限,开发者可以根据自身需求,制定对应的安全策略。默认的安全策略配置位于以下两个配置文件中:

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

Springboot项目集成沙箱支付完成退款功能 沙箱机制jvm_安全策略_03

 默认的安全策略配置不允许应用程序对文件的读写操作,所以如果你试图写一个文件,运行时会报如下错误:
如果你希望开放这个权限,可以编写自己的安全策略文件,比如我们写一个my.policy:

Springboot项目集成沙箱支付完成退款功能 沙箱机制jvm_应用程序_04

 然后在运行时指定这个策略配置就可以了:
java -Djava.security.manager -Djava.security.policy=。/my.policy SandboxTest

Docker的沙箱

1.本质利用DockerFile,对应用组件进行组装=From基础环境+一些依赖,包+入口,运行命令

2.搭建测试环境。沙箱的应用只能访问自己的应用访问目录,而不能应用之间的资源进行共享,这样就形成了一个相对安全的机制,由于沙箱具有非常良好的独立性、隔离性,所以能够搭建一些具有高风险的软件进行测试。