gpt4 book ai didi

javascript - Pebble 如何监视沙箱用户 javascript/expose api?

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:14 25 4
gpt4 key购买 nike

我想知道如何在不允许修改这些接口(interface)的情况下对用户 JavaScript 进行沙箱处理并公开接口(interface)?特别是在 Nodejs 环境中。示例:

//public class you can interface (should be immutable)
function InterfaceClass () {
this.x = 0;
thix.y = 0;
}

//executing users code (in a sandbox of some sort)
function userCode () {
//disallow this:
InterfaceClass = function () {

};

//allow this:
var interface = new Interface();
interface.x = 1;
}

最佳答案

沙箱中唯一易于实现的部分是保护您的接口(interface)和您自己的自定义 Javascript 函数。

您可以创建一种情况,其中没有任何可以修改的您自己的全局变量,并且用户代码从外部世界接收的唯一变量是副本。

为此,请将用户代码放入您创建的函数中(类似于加载 Node 模块的方式),然后将 API 的副本传递给用户代码,作为包装用户代码的主函数的参数(可能向其传递一个具有该对象属性的对象)。然后,用户代码所能做的就是修改副本,而不是修改任何原始代码,因此不会影响任何其他代码。

使用您的示例:

// interfaces created inside some private scope
(function() {

//public class you can interface (should be immutable)
function InterfaceClass () {
this.x = 0;
thix.y = 0;
}
var api = {Interface: InterfaceClass};
launchUsercode(api);
})();


// user code is wrapped in your own function creating a private scope
function launchUsercode(api) {
//executing users code (in a sandbox of some sort)
function userCode () {
//allow this:
var interface = new api.Interface();
interface.x = 1;

// mucking with api.Interface does not do anything other than
// mess up their own environment
}

userCode();
};

仅供引用,它唯一保护的是您自己的函数的重新定义。该用户代码可以自由地执行任何 Node.js 应用程序可以执行的任何操作,启动服务器、读/写文件系统、关闭进程、启动子进程等……这甚至与一般安全性相去甚远。这是一个非常非常困难的问题,可能需要具有自己的文件系统、独立进程和大量进程管理的全面防火墙虚拟机来解决。这根本不是一件容易的事。

关于javascript - Pebble 如何监视沙箱用户 javascript/expose api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31912457/

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