javascript - WASM 可以用来检查 JS 方法的完整性吗?

标签 javascript c security emscripten webassembly

我正在试验 webAssembly 并试图找出一种方法来验证 webAssembly 模块使用的 JS 方法的完整性。

为了讨论的目的,我们假设二进制模块不可破解(我知道情况并非如此),但 JS 端是。

给定以下 C 代码:

#include <emscripten.h>

//js method to validate
void validateMe();

int validateMethods(){
    // check validateMe integrity.
    // return 1 if validation succeeded.
}

EMSCRIPTEN_KEEPALIVE
void doStuff(){
    if (validateMethods()){
       // do stuff
    }
}

我想从 JS 端调用 doStuff()doStuff() 只有在完整性检查成功时才会运行。 我想做一些完整性检查,类似于 Subresource , 检查方法的 toString 表示。但是,如果我想获取当前(内存中的)JS 方法 toString,我将不得不调用可能被破坏的 JS。

问:我能否以某种不同的方式获取 toString?任何其他方法也将不胜感激。

更新:深入挖掘后,阅读 this article ,好像除了shared array就没有办法访问JS内存了。因此,我们将不胜感激任何验证技术。


更新 2(目标):我的最终目标是确保 WASM 部分仅适用于特定的 JS,或者至少使其更难与被操纵的 JS 交互。

Fiddle 示例: following fiddle , 是一个简单的函数验证,逐个比较函数的 toString。如果更改 validateMe 函数,验证将失败。我正在努力使其“防弹”。

最佳答案

JS 是一种动态语言,您可以(几乎)覆盖所有内容。您可以将函数的主体作为字符串获取并对其进行散列以生成它的“快照”,稍后检查此快照,但可以独立地覆盖其中一个内部函数。

var getA = function() { return 1; };

var myFunc = function() {
  var a = getA();
  return a * 2;
};

WebAssembly.instantiate(wasmBytes, { myFunc });

// ... later on ...
getA = function() { return 5; };

关于javascript - WASM 可以用来检查 JS 方法的完整性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50149603/

相关文章:

c - 异步 GIO 服务器/客户端

c - C 中的程序未按预期执行(当输入 Int 后跟字符时)

wcf - 防止在 WCF 中的用户之间共享登录凭据

java - 在 Spring Boot 中将 jsessonid cookie 设置为 SameSite=Strict 属性?

javascript - Android 上的 Cordova 文件 API : window. requestFileSystem 永远不会在设备上触发

javascript - 如何将此 Silverlight 控件转换为 HTML/CSS/JS

c - 定义数百个双常量的最节省内存的方法

javascript - 如何在 node.js 可读流中调用异步函数

Javascript GUID(全局唯一标识符)生成器说明

security - 使用 .htaccess 文件保护网站目录安全吗?