gpt4 book ai didi

javascript - 如何在服务器端运行不受信任的代码?

转载 作者:IT老高 更新时间:2023-10-28 22:07:08 27 4
gpt4 key购买 nike

我正在尝试使用沙盒模块在 linux + node.js 中运行不受信任的 javascript 代码,但它已损坏,我所需要的只是让用户编写打印出一些文本的 javascript 程序。不允许其他 i/o,只使用普通的 javascript,没有其​​他 Node 模块。如果它真的不可能做到,你建议用什么其他语言来完成这种任务?我需要的最小功能集是一些数学、正则表达式、字符串操作和基本的 JSON 函数。脚本将运行 5 秒,然后进程将被终止,我该如何实现?

最佳答案

我在此类问题中看到的所有库(vm2jailed)都试图隔离 node 进程本身。这类“ jail ”不断被打破,并且高度依赖于 future 对 node 标准库的升级,以免暴露另一个攻击媒介。

另一种方法是直接使用 V8::Isolate 类。它旨在隔离 Google Chrome 和 node 中的 JavaScript,因此您可以期望它得到完全维护,并且比您、我或单个库维护者能够做到的更安全。这个类只能运行“纯”JavaScript。它具有完整的 ECMAScript 实现,但没有浏览器 API 或 node API。
这就是 Cloudflare 用于他们的 Worker 的内容。产品。

deno ,由 node 的创建者开发的新语言,其野心是在默认情况下使用完全相同的东西进行沙箱化,并根据您启用的标志公开标准库的部分内容。

node环境,可以使用isolated-vm .这是一个了不起的库,它可以使用您要单独运行的代码创建 v8::Isolated 子进程。

它提供了将值和函数传递给隔离和返回的方法。这并不像大多数“ jail ”库那样简单易用,但可以保证 JavaScript 代码的实际沙盒。
由于它是“纯”JavaScript,因此唯一的转义是您以注入(inject)函数的形式提供的转义。
此外,它会随着每个 node 版本自动更新,因为它使用 node 自己的 v8::Isolate
主要的痛点之一是,如果您想在脚本中注入(inject)库,您可能需要使用像 webpack 这样的包 bundler ,以便将所有内容捆绑在一个脚本中,供图书馆。

我个人使用它在爬虫中运行用户提供的代码,以使用用户提供的代码从网页中提取信息,效果非常好。

关于javascript - 如何在服务器端运行不受信任的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10937870/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com