WebAssembly如何获得安全性

1、虚拟机

WebAssembly是第一个共享JavaScript VM的语言,而JavaScript VM在运行时是沙箱化的,同时经历了多年的检验和安全测试,确保了其安全性。

WebAssembly模块的可访问范围不超过JavaScript的访问范围,同时也会遵守相同的安全性规则,包括同源策略这样的增强规则。

2、线性内存

和桌面应用程序不同,WebAssembly模块对设备内存没有直接访问权限,而是运行时,环境在初始化过程中向模块传递一个ArrayBuffer。模块将这个ArrayBuffer当作线性内存来使用,WebAssembly框架执行检查以确保代码不会对这个数组进行越界操作。

3、函数指针

函数指针存储在Table段中,WebAssembly模块不能直接访问。代码会用索引值向WebAssembly框架提出访问某个项目的请求。然后框架访问内存,并代表代码执行这个项目。

4、执行栈

在C++中,执行栈与线性内存一起位于内存中,虽然C++代码不应该修改执行栈,但是它可以使用指针实现修改。WebAssembly的执行栈与线性内存是分离的,代码无法访问。

你可能感兴趣的:(wasm)