转换为 WebAssembly 时使用什么语言重要吗?

Does it matter what language is used when converting to WebAssembly?

比如C在安全方面没有Rust一样的解决方案,但是用Rust写的WebAssembly有Rust的优点吗?

用 Rust 编写并转换为 WebAssembly 的程序会比用 C 编写的程序 "safer" 好吗?

是的。

虽然 WASM 本身可以防止一些攻击,但 Rust 使之不可能或更难利用的许多攻击仍然会出现在 C 到 WASM 的程序中。 WASM 中至少存在以下攻击向量:

  • 整数overflows/underflows:在C中是UB,但在Rust中定义。
  • 缓冲区溢出:WASM 使用线性内存。 Rust 防止缓冲区溢出,那些是 C 中的 UB。
  • 免费后使用:安全的Rust不可能有,那些在C中很常见。

无论使用 C 还是 Rust 作为源语言,使用 WASM 都应该不可能进行其他一些攻击:

  • 任意 OS 级代码执行:WASM 根本没有这些。
  • 可执行文件-space WASM 不需要保护。

使用这些攻击向量的唯一方法是在浏览器本身中找到漏洞。