- 目录
- 1. 序章
- 2. 计算机网络与协议
- 3. 信息收集
- 4. 常见漏洞攻防
- 5. 语言与框架
- 6. 内网渗透
- 7. 云安全
- 8. 防御技术
- 9. 认证机制
- 10. 工具与资源
- 11. 手册速查
- 12. 其他
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
5.4.3. WebAssembly
5.4.3. WebAssembly
5.4.3.1. 简介
简而言之,WASM是一种分发要在浏览器中执行的代码的新方法。它是一种二进制语言,但是无法直接在处理器上运行。在运行时,代码被编译为中间字节代码,可以在浏览器内快速转换为机器代码,然后比传统JavaScript更有效地执行。
5.4.3.2. 执行
虽然浏览器可能以不同的方式来实现Wasm支持,但是使用的沙盒环境通常是JavaScript沙箱。
在浏览器中运行时,Wasm应用程序需要将其代码定义为单独的文件或JavaScript块内的字节数组。 然后使用JavaScript实例化文件或代码块,目前不能在没有JavaScript包装器的情况下直接在页面中调用Wasm。
虽然Wasm可以用C / C++等语言编写,但它本身不能与沙箱之外的环境进行交互。这意味着当Wasm应用程序想要进行输出文本等操作时,它需要调用浏览器提供的功能,然后使用浏览器在某处输出文本。
Wasm中的内存是线性的,它在Wasm应用程序和JavaScript之间共享。 当Wasm函数将字符串返回给JavaScript时,它实际上返回一个指向Wasm应用程序内存空间内位置的指针。 Wasm应用程序本身只能访问分配给它的JavaScript内存部分,而不是整个内存空间。
5.4.3.3. 安全
Wasm的设计从如下几个方面考虑来保证Wasm的安全性
- 保护用户免受由于无意的错误而导致漏洞的应用程序的侵害
- 保护用户免受故意编写为恶意的应用程序的侵害
- 为开发人员提供良好的缓解措施
具体的安全措施有
- Wasm应用程序在沙箱内运行
- Wasm无法对任意地址进行函数调用。Wasm采用对函数进行编号的方式,编号存储在函数表中
- 间接函数调用受类型签名检查的约束
- 调用堆栈受到保护,这意味着无法覆盖返回指针
- 实现了控制流完整性,这意味着调用意外的函数将失败
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论