【发布时间】:2021-08-01 03:25:15
【问题描述】:
假设我从 example.com 加载了一个网页,其中包含一些 Javascript 和两个来自同一来源的 WebAssemblies。我正在尝试了解安全边界,但找不到将它们放在一起的参考。所以:
- WebAssembly 模块可以直接对
example.com执行HTTP 操作吗? (我认为:是的) - Javascript 能否访问任何 WebAssembly 中未明确导出的“内部”(数据或代码)? (我认为:没有)
- WebAssembly 1 能否访问 WebAssembly 2 的任何未明确导出的“内部”(数据或代码)? (我认为:没有)
- WebAssembly 可以访问任何 Javascript(数据或代码)吗? (我认为:不,除非它是回调或先明确注册)
我真正想要达到的目标:
- 如果 WebAssembly 1 包含“秘密令牌 1”,而 WebAssembly 2 包含“秘密令牌 2”,是否有办法让它们中的任何一个访问对方的令牌?
【问题讨论】:
-
“包含”是什么意思?编译成源代码还是运行时计算?
-
我认为您所有问题的答案都是肯定的,具体取决于 WASM 模块的导入/导出。
-
@JonasWilms 我的意思是编译到源代码中。但是有区别吗?如果出口尽可能限制,您认为仍然可以访问吗?任何指向此描述的指针,因为我没有找到任何权威。
-
是的,有。 WASM 文件只是一堆通过 HTTP 加载的文本。因此,一旦 WebAssembly1 能够逃到 JS 领域,它就可以简单地再次获取另一个源并执行它想做的任何事情。从正在运行的运行时中获取信息可能更加困难。 “尽可能严格”可以工作,但是 JS 中有很多陷阱(例如
eval),所以很难做到这一点。
标签: javascript security browser webassembly