【问题标题】:WebAssembly in the browser security questionWebAssembly 中的浏览器安全问题
【发布时间】: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


【解决方案1】:

如果 WebAssembly 1 包含一个“秘密令牌 1”,而 WebAssembly 2 包含一个“秘密令牌 2”,有没有办法让他们中的任何一个访问对方的令牌?

由于它们在同一来源中运行,可能是的。但是您应该能够通过沙盒 iframe 或类似的方式使用不同的来源来防止这种情况发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-12
    • 2015-09-13
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多