Ok… sono ancora alla ricerca per far funzionare il mio adserver su Discourse. Mi sono imbattuto in questo mistero che non riesco a risolvere. Usando la funzione di modifica del tema, ho aggiunto la mia richiesta di script sia a <body> che a ‘footer’.
Se aggiunto al footer (o ‘dopo l’intestazione’), il codice non funziona. Anche se in modalità ispezione il testo codificato sembra corretto. Vedi sotto:
Inoltre, non riesco ancora a far funzionare da soli i miei annunci Adsense, ma forse il problema è dalla loro parte e non hanno ancora scansionato il sito per vedere cosa mostrare. Strano che stia richiedendo così tanto tempo.
Ok, ho notato che il log CSP indicava che lo script di Google Ads veniva bloccato, quindi ho aggiunto
https://pagead2.googlesyndication.com
alla lista script-src del CSP e le mie pubblicità Google AdSense hanno iniziato a comparire (sono rimasto piuttosto sorpreso che sia ancora necessario fare questo anche con il plugin AdSense installato). Tuttavia, ho notato che con le mie House Ads impostate al 100% (in modo che venga chiamato solo il mio script), non ricevo NESSUNA notifica CSP di problemi. Questo mi lascia di nuovo confuso. Il codice delle House Ads è nell’HTML (codificato) e appare come sopra nella vista di ispezione del browser.
C’è qualcosa che blocca l’output senza però attivare un avviso CSP?
L’output utilizza document.write per creare lo spazio pubblicitario. Immagino che sia la causa del problema. L’output appare così:
Quindi… tutto questo è legato alla CSP (immagino), dato che il sito è impostato su ‘unsafe-inline’ e sto cercando di caricare lo script del mio ad server tramite un URL con variabili. Lo so… quanto sia primitivo da parte mia.
Quindi… QUALCUNO? Esiste una soluzione semplice o dovrei semplicemente arrendermi?
La correzione corretta consiste nel non utilizzare l’inline e riscriverlo per integrare gli outlet esistenti dei template di EmberJS. Se stai cercando una soluzione temporanea, puoi disabilitare la CSP nelle impostazioni del sito mentre lavori alle modifiche della tua soluzione personalizzata per gli annunci. Tieni presente che ciò potrebbe esponerti a vulnerabilità XSS.
Inoltre, dove viene dichiarata la Content Security Policy? Non vedo alcun tag meta a riguardo. Si tratta semplicemente delle impostazioni predefinite di HTML 5 assunte da ogni browser?
Grazie, Falco. Invece di disattivare completamente tutte le protezioni, esiste un modo per inserire in whitelist le stringhe di dati solo per l’URL dell’adserver e consentire il passaggio di quelle variabili? O… disattivare semplicemente il requisito “‘unsafe-inline’ data”?
Purtroppo non vedo quell’opzione descritta nell’articolo che hai collegato.
Eppure l’annuncio non viene visualizzato nella sezione principale del sito, solo nel piè di pagina dove è installato nel tema in <body>. Mi sono accorto che c’è un wrapper <noscript> attorno alla sezione centrale, mentre quello nel piè di pagina è esterno alla chiusura di </noscript>, quindi forse è per questo?
Ho controllato su Firefox e ora la console non mostra più avvisi CSP. Non so perché non li abbia mai visti in Chrome fin dall’inizio.
Discourse è un’applicazione a pagina singola e tutto il markup delle pagine viene creato lato client tramite la nostra applicazione EmberJS.
L’utilizzo della manipolazione diretta del DOM come document.write è in diretto conflitto con l’intero sistema e ha una probabilità davvero bassa di “funzionare semplicemente”.
Consiglierei di provare ad adattare il tuo sistema di pubblicità per utilizzare il nostro sistema House Ads nel plugin ufficiale per la pubblicità. Forse puoi inserire un singolo annuncio nell’inventario House Ads e utilizzare il gancio per il cambio pagina per contattare il server pubblicitario e sostituire l’annuncio con la risposta? Oppure, il tuo sistema di pubblicità potrebbe scrivere direttamente nell’inventario House Ads tramite API?
Grazie per l’aiuto, Falco. Un po’ spaventoso, ma il codice di questo ad server è stato scritto prima che il termine API fosse coniato, quindi… sì, sarei meglio a scrivere un nuovo sistema di ad server da zero. Al momento non ho tempo per farlo, dato che sto deployando questo nuovo forum e oltre 6 nuovi siti di contenuti.
Proverò a sperimentare alcune alternative all’uso di document.write per vedere se possono funzionare.