- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想知道如何在不允许修改这些接口(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/
我在一对多关系中有两个实体。 “One”实体拥有“Many”的生命周期。如果删除“One”实体,我希望自动删除属于“One”的所有“Many”实体。 我假设有一种方法可以像在 Hibernate 中一
我创建对象和 dao 类以使用 sql object UserTable : IdTable("User") { val parameters = reference("search_para
我有这个 Delphi 类(class) type TAnotherClass = class end; TMyClass = class function Foo: TAnoth
我想了解 the very first Elm example它有这个: import Graphics.Element exposing (..) 什么exposing (..)意思? 最佳答案 e
您好,我尝试通过 fabric8 访问 th spring-boot 教程应用 之后: C:\Users\gregor>kubectl expose deployment springboottut
我的 Dockerfile 为环境变量设置了一些默认值,然后公开了两个应该是提供的环境变量的端口: FROM python:3.6.5-stretch [ ... ] ENV MY_SERVICE_P
我正在尝试使用 Kotlin Exposed 批量插入记录到 SQL 表中。我已经按照 Exposed 文档设置了代码,但是,正在执行的 SQL 语句是单独的插入语句,而不是 1 个批量插入语句。 位
我环顾四周,但似乎无法找到如何使用 Kotlin 的 Exposed SQL 框架“在不存在时插入”或“在冲突时插入”。我目前正在编写原始 SQL 语句并按原样执行它们。我认为在某些情况下我无法避免这
关于 docker 网络的一些事情让我感到困惑。我有一个 docker-compose.yml可以像这样简化的文件: version: '3.8' services: foo:
有没有什么方法或函数可以用来在Mac中单击按钮时获得曝光效果? 我尝试过搜索,但到目前为止我还没有运气。 最佳答案 没有用于此目的的 API。据我所知,唯一的方法是使用 NSWorkspace 启动
在处理 opensource Dockerfile 时收到的一个问题让我很困惑。 ,归结为“为什么要更改图层?” - 所以我试图用我自己的调查来回答这个问题。 我很抱歉这个主题没有很好地定义,但本质上
Dockerfile 命令 EXPOSE和 docker run参数--expose告诉 docker 端口必须公开。 使用 -p 发布端口时,您可以映射一个 外部主机端口 到另一个 内容器端口 ,例
我想将 SOA 模式合并到我的 3 层结构中。我在 BLL 和 UI 之间创建了一个服务层(WCF 主机)。我的结构设置现在看起来像这样 UI <> WCF <> BLL <> DAL 问题是
docker -ps -a CONTAINER ID IMAGE COMMAND CREATED S
我是 ZeroRPC 的新手, 我想公开一个类和一个模块,所以我实际上有两个问题:1. 暴露模块的最佳方式是什么? 我试过类似的东西: import zerorpc server_obj = __im
我正在使用 Webpack 2、Bootstrap 3 和 TypeScript,并尝试将 npm 和打包包集成到现有应用程序中。我正在使用 ProvidePlugin使 jQuery 可用,以及 e
我一直在尝试创建 docker 文件和阅读文档,我想知道这个问题:是否将 EXPOSE 命令添加到我的 Dockerfile 会添加一个层? (如果确实如此,我为什么要关心/它在文件中的放置位置是否重
在 Jetbrains 的 Exposed,一个 Kotlin SQL 框架的 github 页面上,有一个链接指向一个页面,您可以在其中获取该库的 maven 依赖项 (https://bintra
按照 Exposed 上提供的示例进行操作我无法在创建它的事务之外读取创建的表/数据。我正在使用 h2-in-memory 数据库。 异常(exception)是: Exception in thre
以下是我们如何获取添加行的 ID (source): val munichId = Cities.insert { it[name] = "Munich" } get Cities.id 获取
我是一名优秀的程序员,十分优秀!