Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

157
Visualizações
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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda