webassembly - 转换为 WebAssembly 时使用什么语言有关系吗?

标签 webassembly

例如,C 没有与 Rust 相同的安全解决方案,但是用 Rust 编写的 WebAssembly 是否具有 Rust 的优点?

用 Rust 编写并转换为 WebAssembly 的程序会比用 C 编写的程序“更安全”吗?

最佳答案

是的。

虽然 WASM 本身可以防止一些攻击,但许多 Rust 无法或难以利用的攻击仍然存在于 C 到 WASM 程序中。 WASM 中至少存在以下攻击向量:

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

  • 无论使用 C 还是 Rust 作为源语言,使用 WASM 都不应该进行其他一些攻击:
  • 任意操作系统级别的代码执行:WASM 根本没有这些。
  • WASM 中不需要可执行空间保护。

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

    关于webassembly - 转换为 WebAssembly 时使用什么语言有关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60056483/

    相关文章:

    types - 在 Rust 程序和嵌入式 WebAssembly 运行时之间进行通信的最佳实践是什么?

    security - 浏览器如何保护进程内存免受 webassembly 编译代码的影响?

    javascript - 如何将字符串传递给使用 emscripten 为 WebAssembly 编译的 C 代码

    v8 - 有没有办法向 V8 Turbofan 提供 asm.js 或 WebAssembly 代码?

    rust - 使用Yew框架进行Webassembly的未发现的错误

    firefox - 如何从 C 代码生成带有 i64 而不是 i32 的 Webassembly (WAT)

    c++ - Qt for wasm : error: use of undeclared identifier 'QThreadPool'

    c++ - 将 C/C++ 套接字传递到 EM_ASM 以用作 Emscripten 中的 websocket

    bash - Web Assembly emrun : command not found when running from batch script, 但在命令窗口中运行良好

    c# - 在运行时从 Blazor 应用程序中动态加载的程序集呈现页面