Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

156
Vistas
Evaluación de amenazas Javascript Nombres de variables controlados por el usuario en la ventana

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:

  1. solo los usuarios con permiso de administrador especial pueden modificar la configuración del inquilino
  2. los nombres de variables globales tienen una lista negra, no puede especificar nombres de variables globales que coincidan con patrones particulares
  3. los valores de las variables globales deben definirse como una cadena JSON, por lo que no pueden ser funciones u otra cosa
  4. Las URL de la secuencia de comandos tendrán una lista blanca de URL base, las URL base comenzarán con https:// y terminarán con / -- las URL de la secuencia de comandos deben comenzar con una de estas URL base, por ahora la lista blanca solo incluirá este proveedor

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?

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda