← Tutti gli articoli

API e helper

Come JustZix inietta codice su pagine con CSP rigido

Alcune pagine hanno una Content-Security-Policy così rigida da non eseguire alcuno script che il loro autore non abbia scritto. Eppure JustZix può iniettarvi il tuo JS e agganciare l'Output Console al console.log della pagina. Questo articolo spiega come — e perché la prima versione non poteva.

Cos'è la CSP e perché intralcia

La Content-Security-Policy è un header HTTP con cui una pagina dichiara da dove possono essere caricati gli script. Una policy rigida tipica è script-src 'self' — «esegui solo script dal mio dominio». Una policy del genere blocca gli <script> inline: se inietti un tag <script>codice...</script> nel DOM, il browser non lo esegue. È così che funzionano GitHub, le dashboard bancarie e molti siti aziendali.

Il primo approccio — e una regressione

Una versione iniziale dell'hook dell'Output Console (v2.13.72–73) iniettava il codice proprio tramite uno <script> inline aggiunto a <head>. Sulle pagine ordinarie funzionava. Sulle pagine con script-src 'self' il browser rifiutava silenziosamente lo script — l'hook non si agganciava mai, l'Output Console restava vuota. Era una regressione: una funzione che funzionava «nella demo» falliva esattamente dove uno sviluppatore ne ha più bisogno.

La correzione — chrome.scripting.executeScript

La soluzione (v2.13.74) non inietta più un tag <script>. Invece il service worker dell'estensione chiama chrome.scripting.executeScript. È la differenza cruciale: questo script viene eseguito con il privilegio dell'estensione, non a livello di pagina. La CSP della pagina non si applica ad esso — il browser lo tratta come codice di un'estensione fidata a cui l'utente ha acconsentito all'installazione.

Mondo MAIN contro mondo ISOLATED

I content script di un'estensione vivono per impostazione predefinita in un «mondo isolato» (ISOLATED) — hanno un proprio window, separato dalla pagina. È sicuro, ma inutile quando vuoi agganciarti al vero console.log della pagina o toccare le sue variabili globali.

Perciò l'hook atterra nel mondo MAIN — lo stesso contesto JavaScript in cui vive il codice della pagina. Lì può avvolgere console.log/warn/error, collegare listener error e unhandledrejection e vedere esattamente ciò che vede la pagina.

Un ponte tra i mondi — postMessage

L'hook nel mondo MAIN cattura i log, ma la finestra Output Console stessa viene renderizzata da un content script nel mondo ISOLATED. I due mondi non condividono variabili — serve un ponte. Quel ponte è window.postMessage:

  1. L'hook del mondo MAIN intercetta una voce console.log.
  2. Serializza gli argomenti e chiama window.postMessage con un payload taggato.
  3. Il content script ISOLATED ascolta message, filtra per tag e renderizza la voce nella finestra Output Console.

postMessage è uno dei pochi canali che attraversano il confine dei mondi — e lo fa senza violare la CSP, perché non è esecuzione di script, solo passaggio di messaggi.

Cosa significa in pratica

L'Output Console e l'iniezione JS funzionano su pagine dove il classico trucco dello script inline fallirebbe — GitHub, dashboard bancarie, intranet aziendali con CSP duro. Non configuri nulla; l'estensione sceglie da sé questa strada.

Limiti — cosa la CSP comunque non permetterà

Aggiornamento v3.2.0 — anche regole, azioni e finestre TEMP

Il meccanismo descritto sopra riguardava l'hook dell'Output Console — come l'estensione ascolta il console.log della pagina. L'esecuzione delle tue regole JS, delle azioni e delle finestre TEMP JS è un percorso separato — e anch'esso un tempo funzionava solo sulle pagine la cui CSP permetteva 'unsafe-eval'. Nella v3.2.0 abbiamo portato la stessa «strategia stratificata» anche su quel secondo percorso: l'ordine dei tentativi è chrome.userScripts.executenew Function<script src="blob:…">. Regole, azioni e il pannello JS / JS Console ora funzionano anche su Facebook (tramite il fallback blob) e su siti con CSP completamente rigida (tramite userScripts dopo aver attivato una volta «Allow user scripts»). Approfondimento completo: Le regole JavaScript di JustZix ora funzionano anche su Facebook, X e GitHub.

Vedi anche

Installa JustZix — e inietta codice anche dove la pagina dice «no».

Valuta questo articolo

Nessuna valutazione — sii il primo.

Provalo tu stesso

Installa JustZix e incolla qualsiasi snippet di questo articolo. Due minuti da zero a una regola funzionante su tutti i tuoi dispositivi.

Ottieni JustZix

Funzionalità · Come funziona · Esempi · Casi d'uso