Caso de uso
Necesito ejecutar algún JavaScript enviado por el usuario que interactuará con un objeto API que solo contiene datos y funciones API. Espero una lógica lineal simple del código enviado por el usuario que solo usará los datos proporcionados por el objeto API como entrada y también escribirá la salida en el objeto API.
Mi plan
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.No estoy muy familiarizado con JavaScript y no estoy seguro de si esto es suficiente (realmente no me importa el agotamiento de la memoria y los ataques de tiempo de espera en este momento). Cualquier pensamiento sería bienvenido.
Gracias por adelantado.
Puede almacenar las palabras clave que no desea que contenga la cadena en una matriz y usar Array.some para verificar si la cadena contiene uno de los elementos:
const bannedKeywords = ['this', 'prototype', 'constructor'] function isSafe(str){ return !bannedKeywords.some(e => str.includes(e)) } console.log(isSafe('a')) console.log(isSafe('this'))