Okay… immer noch auf der Suche, wie ich meinen Adserver in Discourse zum Laufen bekomme. Ich bin auf ein Rätsel gestoßen, das ich nicht lösen kann. Über die Theme-Bearbeitungsfunktion habe ich meine Skriptanfrage sowohl in </body> als auch in ‘footer’ eingefügt.
Wenn ich sie im Footer (oder ‘nach dem Header’) hinzufüge, schlägt der Code fehl. Obwohl der Text im Inspektionsmodus korrekt kodiert erscheint. Siehe unten:
Könnte ich bitten, dass ein Moderator diesen Beitrag in die Support-Kategorie oder eine andere passende Kategorie verschiebt? Ich habe ihn zunächst ohne Kategorie belassen.
Danke. Und entschuldigt bitte, dass ich so drängend bin, aber mein Deployments-Termin rückt näher und ich muss dieses Problem unbedingt klären.
Okay, ich habe festgestellt, dass das CSP-Log meldete, dass das Google Ads-Skript blockiert wurde. Daher habe ich
https://pagead2.googlesyndication.com
zur Liste der CSP-Script-Src-Quellen hinzugefügt, und daraufhin tauchten meine Google AdSense-Anzeigen wieder auf (ich war ein wenig überrascht, dass man das sogar dann noch tun muss, wenn das AdSense-Plugin installiert ist). Was mir jedoch aufgefallen ist: Wenn meine House Ads auf 100 % eingestellt sind (also nur mein Skript aufgerufen wird), erhalte ich KEINE CSP-Benachrichtigung über ein Problem. Das bringt mich also wieder zurück zu meiner Verwirrung. Der Code für die House Ads befindet sich im HTML (kodiert) und erscheint in der Browser-Inspektionsansicht wie oben dargestellt.
Gibt es etwas, das die Ausgabe blockiert, aber keine CSP-Warnung auslöst?
Die Ausgabe verwendet document.write, um den Anzeigenplatz zu erstellen. Ich vermute, das ist die Ursache. Die Ausgabe sieht folgendermaßen aus:
Lol… wenn ich die Skriptausgabe hier als Text einfüge, wurde sie problemlos generiert. Doh…
Ich habe diesen Beitrag mit einem ähnlichen Problem gefunden, aber diese Person hat es selbst gelöst und ist offensichtlich viel besser mit JavaScript vertraut als ich.
Wie er bin ich bereit, jemandem für Hilfe bei diesem Problem zu bezahlen.
Also… das liegt alles an CSP (ich nehme an), da die Site auf ‘unsafe-inline’ für Daten eingestellt ist und ich versuche, mein Werbeskript mit einer URL und Variablen zu laden. Ich weiß… wie barbarisch von mir.
Also… JEMAND? Gibt es eine einfache Lösung dafür, oder sollte ich einfach aufgeben?
Die richtige Lösung besteht darin, Inline-Code zu vermeiden und stattdessen die vorhandenen EmberJS-Template-Ausgänge zu nutzen. Wenn Sie eine schnelle, vorübergehende Lösung suchen, können Sie CSP in den Seiteneinstellungen deaktivieren, während Sie Änderungen an Ihrer benutzerdefinierten Werbelösung vornehmen. Beachten Sie jedoch, dass dies Sie anfällig für XSS-Angriffe machen kann.
Wo wird die Content Security Policy deklariert? Ich sehe kein Meta-Tag dafür. Sind dies einfach die Standard-Einstellungen von HTML 5, die von jedem Browser angenommen werden?
Danke, Falco. Anstatt den gesamten Schutz einfach zu deaktivieren, gibt es dann vielleicht eine Möglichkeit, Datenstrings für die Adserver-URL in eine Whitelist aufzunehmen und diese Variablen durchzulassen? Oder… einfach die Anforderung für „unsafe-inline
Und trotzdem wird die Anzeige nicht im Hauptbereich der Seite dargestellt, sondern nur im Footer, wo sie im Theme innerhalb von </body> eingebunden ist. Mir ist aufgefallen, dass der mittlere Bereich von einem <noscript>-Tag umschlossen ist, während der Footer-Bereich außerhalb des schließenden </noscript>-Tags liegt. Vielleicht ist das der Grund?
Ich habe in Firefox nachgeschaut, und meine Konsole zeigt jetzt keine CSP-Warnungen mehr an. Ich bin mir nicht sicher, warum ich diese anfangs in Chrome überhaupt nicht gesehen habe.
Discourse ist eine Single-Page-Anwendung, und das Seiten-Markup wird clientseitig über unsere EmberJS-Anwendung erstellt.
Die direkte Manipulation des DOM, z. B. mit document.write, steht in direktem Widerspruch zum gesamten Konzept und hat eine sehr geringe Chance, einfach so zu funktionieren.
Ich empfehle Ihnen, Ihr Werbesystem so anzupassen, dass Sie unser System für Hauswerbung im offiziellen Werbe-Plugin nutzen. Vielleicht können Sie eine einzelne Anzeige im Bestand der Hauswerbung unterbringen und den Page-Change-Hook verwenden, um den Werbeserver aufzurufen und die Anzeige durch die Antwort zu ersetzen? Oder Ihr Werbesystem könnte über die API direkt in den Bestand der Hauswerbung schreiben?