转换为 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 不需要保护。
使用这些攻击向量的唯一方法是在浏览器本身中找到漏洞。
比如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 不需要保护。
使用这些攻击向量的唯一方法是在浏览器本身中找到漏洞。