Confuso sul contenuto javascript caricato da remoto

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:

Il testo “Dove si trova?” appare, ma nient’altro.

Tuttavia, la stessa richiesta di script (riportata sotto) aggiunta a <body> funziona. Perché?

<script language="Javascript" src="https://adserver.kitmaker.net/index.php?section=serve&action=1">

Ho provato ad aggiungerlo al campo dati House Ads e di nuovo il testo fa parte dei dati codificati nella pagina, ma non succede nulla.

creatives\":{\"Leaderboard Ad\":\"<script language=\"Javascript\" src=\"https://adserver.kitmaker.net/index.php?section=serve&action=1\">\"}},\"

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.

Grazie per qualsiasi aiuto.

Jim

Speriamo che uno sviluppatore veda questo. :slight_smile:

Potrei chiedere a un moderatore di spostare questo messaggio nella sezione di supporto o in quella più appropriata? L’ho lasciato senza categoria.

Grazie. Scusa se insisto, ma mi avvicino alla scadenza per il deployment e ho davvero bisogno di risolvere questo problema.

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ì:

Lol… se inserissi qui l’output dello script in testo, generava tutto correttamente. Doh…

Ho trovato questo post con un problema simile, ma questa persona l’ha risolto da sola ed è chiaramente molto più brava in JavaScript di me.

Come lui, sono disposto a pagare qualcuno per ottenere aiuto su questo.

Grazie,
Jim

1 Mi Piace

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.

Puoi anche valutare l’aggiunta del tuo server a una fork del plugin per gli annunci, come è stato fatto in queste PR: AdButler support by communiteq · Pull Request #80 · discourse/discourse-adplugin · GitHub o Carbon Ads Integration by barreeeiroo · Pull Request #73 · discourse/discourse-adplugin · GitHub o addirittura Add CodeFund Advertising option by coderberry · Pull Request #65 · discourse/discourse-adplugin · GitHub

4 Mi Piace

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?

Controlla Mitigare gli attacchi XSS con la Content Security Policy

2 Mi Piace

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.

Grazie ancora.

Ok, immagino di dover essere disperato, perché ho provato a disattivare completamente la CSP…

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?

2 Mi Piace

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.

Ciao,
Jim

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.