基于 AsyncLocalStorage 的跨安全域追踪器
构建一个穿越异步边界的跟踪系统,并集成权限检查(跨 vm 模块与 worker_threads)。 · 难度:入门 · +10XP
基于 AsyncLocalStorage 的跨安全域追踪器
本教程利用 AsyncLocalStorage 实现全异步链路追踪,但难点在于跨 vm 沙盒和 worker_threads 传递上下文。我们将设计一个 SecureTracer 类,使用 SharedArrayBuffer 在隔离环境间同步跟踪 ID,并结合 Proxy 劫持 console 和 fs 操作以注入审计日志。最终实现一个即使在动态加载的不可信模块中也能准确记录调用栈的追踪器。
const { AsyncLocalStorage } = require('async_hooks');
const { Worker } = require('worker_threads');
class SecureTracer {
constructor() {
this.als = new AsyncLocalStorage();
}
runInContext(store, fn) {
return this.als.run(store, () => {
// 通过 SharedArrayBuffer 同步到 worker
const buf = new SharedArrayBuffer(8);
const view = new BigInt64Array(buf);
view[0] = BigInt(Date.now());
const worker = new Worker('./worker.js', { workerData: { buf } });
return fn();
});
}
}