• El CSP estricto no permite «Unsafe Eval»

    Índice

    ¿Qué significa eso?

    La Política de Seguridad de Contenidos (CSP) es una directiva de seguridad que indica a los navegadores qué tipos de código pueden ejecutarse en una página web. La directiva «unsafe-eval» controla específicamente si se permite generar y ejecutar código JavaScript de forma dinámica en tiempo de ejecución, por ejemplo, mediante eval() o el constructor Function(). Una CSP estricta, que no permita el uso de «unsafe-eval», bloquea precisamente este tipo de ejecución dinámica de código en el navegador. Esto no solo afecta al código propio de la página web, sino también a herramientas externas que cargan y ejecutan contenidos en tiempo de ejecución, como es el caso de las herramientas de pruebas A/B del lado del cliente.

    ¿Funciona la creación y la entrega también sin «unsafe-eval»?

    No, desde el punto de vista técnico, la creación y la entrega de experimentos no funcionan sin «unsafe-eval». El motivo radica en el propio funcionamiento del fragmento de código: los experimentos no se incorporan de forma estática al implementar la página, sino que el fragmento de código los recupera como configuración en tiempo de ejecución y un motor de JavaScript los aplica en el navegador. Es precisamente esto lo que permite crear o editar un experimento en el panel de control sin que sea necesario un nuevo despliegue por parte del cliente.

    Sin embargo, una CSP solo puede permitir código que conozca de antemano, a través de una fuente fija, un hash o un nonce. Ninguno de estos métodos funciona con contenidos que se generan tras la carga de la página. Para que el navegador pueda ejecutar este código de todos modos, se necesita eval() o el constructor Function(), es decir, precisamente lo que controla unsafe-eval. Dado que la lógica de segmentación y las modificaciones de contenido se ejecutan a través del mismo motor, no existe una ruta de ejecución “segura” independiente que se pueda habilitar únicamente para experimentos sencillos (texto, CSS, imágenes).

    Posible solución

    En lugar de permitir «unsafe-eval» en todo el sitio, la CSP se puede configurar de forma diferente para cada ruta. Las páginas con requisitos especialmente estrictos (por ejemplo, los flujos de inicio de sesión o de autenticación) siguen siendo estrictas y libres de «eval», mientras que «unsafe-eval» solo se permite en aquellas páginas en las que realmente se vayan a realizar experimentos.

  • Primeros pasos