• Un CSP rigoroso non consente l'uso di Unsafe Eval

    Indice dei contenuti

    Cosa significa questo?

    La Content Security Policy (CSP) è una politica di sicurezza che indica ai browser quali tipi di codice possono essere eseguiti su un sito web. La direttiva unsafe-eval controlla in particolare se il codice JavaScript può essere generato ed eseguito dinamicamente in fase di esecuzione, ad esempio tramite eval() o il costruttore Function(). Una CSP rigorosa, che non consente l’uso di unsafe-eval, blocca proprio questo tipo di esecuzione dinamica del codice nel browser. Ciò riguarda non solo il codice proprio del sito web, ma anche gli strumenti esterni che ricaricano ed eseguono contenuti in fase di esecuzione, come nel caso degli strumenti di test A/B lato client.

    La creazione e la consegna funzionano anche senza `unsafe-eval`?

    No, dal punto di vista tecnico la creazione e la distribuzione degli esperimenti non funzionano senza `unsafe-eval`. Il motivo risiede nel funzionamento dello snippet stesso: gli esperimenti non vengono integrati in modo statico al momento della distribuzione della pagina, ma vengono richiamati dallo snippet come configurazione in fase di esecuzione e applicati nel browser tramite un motore JavaScript. È proprio questo che consente di creare o modificare un esperimento nella dashboard senza che sia necessaria una nuova distribuzione da parte del cliente.

    Tuttavia, un CSP può autorizzare solo il codice che conosce in anticipo, tramite una fonte fissa, un hash o un nonce. Nessuna di queste procedure funziona per i contenuti che vengono generati solo dopo il caricamento della pagina. Affinché il browser possa comunque eseguire questo codice, sono necessari eval() o il costruttore Function(), ovvero proprio ciò che controlla unsafe-eval. Poiché la logica di targeting e le modifiche ai contenuti passano attraverso lo stesso motore, non esiste un percorso di esecuzione separato e “sicuro” che si possa abilitare solo per semplici esperimenti (testo, CSS, immagini).

    Possibile soluzione

    Anziché consentire l'uso di `unsafe-eval` a livello di sito, il CSP può essere configurato in modo diverso per ogni route. Le pagine con requisiti particolarmente rigorosi (ad esempio, le procedure di login o di autenticazione) rimangono rigorose e prive di `eval`, mentre l'uso di `unsafe-eval` è consentito solo sulle pagine in cui devono effettivamente essere eseguiti degli esperimenti.

  • Primi passi