javascript - 关于使用 JavaScript Function 构造函数作为沙箱的问题
问题描述
用例
我需要运行一些用户提交的 JavaScript,它将与只包含数据和 API 函数的 API 对象进行交互。我期望用户提交的代码具有简单的线性逻辑,它将仅使用 API 对象提供的数据作为输入,并将输出写入 API 对象。
我的计划
const userSubmittedCode = //get it from somewhere
// If user code contains keywords like 'this', 'prototype', 'constructor', etc, do not continue.
// (Basically anything that the user won't need but seems dangerous)
const callUserCode = Function(
"apiObject",
"const globalThis = window = document = {}; // + anything I want to hide" + userSubmittedCode);
callUserCode(myAPIObject);
// Do things according to myAPIObject's internal state.
我对 JavaScript 不是很熟悉,也不确定这是否足够(现在并不真正关心内存耗尽和超时攻击)。任何想法都会受到欢迎。
提前致谢。
解决方案
您可以将不希望字符串包含的关键字存储在数组中,并用于Array.some
检查字符串是否包含以下项之一:
const bannedKeywords = ['this', 'prototype', 'constructor']
function isSafe(str){
return !bannedKeywords.some(e => str.includes(e))
}
console.log(isSafe('a'))
console.log(isSafe('this'))
推荐阅读
- c++ - 在单独的函数中获取二维数组的数据?
- node.js - Twilio - 我可以转接电话,以便部门的其他人可以接听电话吗?
- swift - 如何在 MacOS 上滚动时修复 SwifyUI 列表的重影?
- javascript - JS 无限循环保护,如何在没有节点或 web-worker 的情况下使用带有 DOM 的 babel-standalone 插件?
- r - 拟合“gls”模型后将“joint_tests”映射到列表
- r - 根据具有重复度量的其他列上的条件向列添加值
- visual-studio-code - Visual Studio 不再识别 Python 关键字
- python - 如何获取从 API 生成的 JSON 列表并将其存储在 Python 的哈希图中?
- javascript - 查询自定义数据库(Mongodb)
- c# - 基于 Azure DevOps 构建的 Blazor Wasm