UNPKG

@discue/somewhat-secure-insecure-fn-executor

Version:

Tries to isolate execution of untrusted code

47 lines (37 loc) 2.16 kB
'use strict' const { readFileSync } = require('fs') const objectHelpersPath = require.resolve('./scripts/is-object-helpers.js') const isObjectHelpers = readFileSync(objectHelpersPath, 'utf-8') const base64Path = require.resolve('./scripts/base64.js') const base64 = readFileSync(base64Path, 'utf-8') const consolePath = require.resolve('./scripts/console-proxy.js') const console = readFileSync(consolePath, 'utf-8') const freezeGlobalsPath = require.resolve('./built-ins/freeze-globals.js') const freezeGlobals = readFileSync(freezeGlobalsPath, 'utf-8') const overrideGlobalsPath = require.resolve('./scripts/override-globals.js') const overrideGlobals = readFileSync(overrideGlobalsPath, 'utf-8') const unsafeScriptRunnerPath = require.resolve('./scripts/unsafe-script-runner.js') const unsafeScriptRunner = readFileSync(unsafeScriptRunnerPath, 'utf-8') const { installSafeScript } = require('./script-runner.js') /** * * @param {import('isolated-vm').Isolate} isolate the isolated environment used to run the script * @param {import('isolated-vm').Context} context the isolated context used for execution * @returns {Promise.<undefined>} */ module.exports.setupHelperScripts = async (isolate, context) => { await installSafeScript({ isolate, context, script: console, path: 'console-proxy.js' }) await installSafeScript({ isolate, context, script: isObjectHelpers, path: 'object-helpers.js' }) await installSafeScript({ isolate, context, script: base64, path: 'base64.js' }) await installSafeScript({ isolate, context, script: overrideGlobals, path: 'code-generation.js' }) await installSafeScript({ isolate, context, script: unsafeScriptRunner, path: 'script-runner.js' }) } /** * * @param {import('isolated-vm').Isolate} isolate the isolated environment used to run the script * @param {import('isolated-vm').Context} context the isolated context used for execution * @returns {Promise.<undefined>} */ module.exports.freezeGlobals = async (isolate, context) => { await installSafeScript({ isolate, context, script: freezeGlobals, path: 'freeze-globals.js' }) }