Tengo el requisito de admitir alguna integración externa con un proveedor externo en nuestro sitio (que es un sitio SaaS con múltiples inicios de sesión de inquilinos). El proveedor requiere que esté disponible una secuencia de comandos y una variable global que la secuencia de comandos lee para obtener información adicional. En este caso, la secuencia de comandos del proveedor se ejecutará en la página y agregará contenido de "ayuda" en la esquina de la pantalla que ayudará al usuario. Este proveedor solo necesita algunos patrones de URL diferentes y hay una variable uuid en el archivo JS del script que apunta al arrendatario (por ejemplo, la empresa) que está integrado con este proveedor.
Una opción para nosotros es apuntar muy específicamente a este proveedor, agregar una pantalla de administración llamada "Configurar X" (donde X es el nombre del proveedor) y luego pedirle al administrador que seleccione qué entorno (prod/vista previa) e ingrese el uuid y eso es todo. . Esto sería rápido, fácil y probablemente lo más seguro de hacer de esta manera.
Sin embargo, supongamos que ofreciéramos aún más flexibilidad: esto podría usarse para este proveedor y también para otros proveedores similares. La página de administración podría llamarse "Configurar integraciones" (o similar) y brinda flexibilidad al administrador para agregar tantas variables globales o URL de secuencias de comandos como desee, con algunas restricciones:
Con este nuevo enfoque flexible, ¿hay algo en lo que no esté pensando que un actor malicioso con permisos para modificar este conjunto de globales/scripts podría hacer?
El código detrás del script de inicio podría verse así
const {globals, scripts} = /* JSON config object persisted by Admin user. */ globals.forEach(({name,value}) => { window[name] = JSON.parse(value); }); scripts.forEach(({url}) => { /* create <script> with src=url, then add to body */ });Mis primeros pensamientos aquí son que los scripts aquí están en la lista blanca solo para un conjunto de orígenes, pero la ruta después de la parte del dominio no está restringida, por lo que podría ir a algún lugar malo (pero supongo que sería del proveedor ... aunque, ¿verdad?)
Luego, los globales: ¿qué sucede si colocan algo extraño allí, como sobrescribir algo que otro script intentaría inyectar scripts o algo así? Realmente necesitaría investigar en la lista negra.
¿Hay algo más aquí que deba considerar, es realmente una mala idea?