Bon… toujours à la recherche de moyen pour afficher mon serveur de publicités sur Discourse. Je suis tombé sur un mystère que je n’arrive pas à résoudre. En utilisant la fonction d’édition du thème, j’ai ajouté ma requête de script à la fois dans </body> et dans ‘footer’.
Si elle est ajoutée au footer (ou ‘après l’en-tête’), le code échoue. Pourtant, en mode inspection, le texte encodé semble correct. Voir ci-dessous :
J’ai aussi essayé d’ajouter cela dans le champ de données des publicités internes, et là encore, le texte fait partie des données encodées sur la page, mais rien ne s’affiche.
Je n’arrive pas non plus à faire fonctionner mes publicités AdSense de manière autonome pour le moment, mais peut-être que cela vient de leur côté et qu’ils n’ont tout simplement pas encore analysé le site pour voir quoi afficher. Étrange que cela prenne autant de temps.
Puis-je demander à un modérateur de déplacer ce message dans la catégorie « Support » ou toute autre catégorie pertinente ? Je l’ai laissé sans catégorie.
Merci. Et désolé d’insister ainsi, mais j’approche d’une échéance de déploiement et je dois absolument résoudre ce problème.
D’accord, j’ai remarqué que le journal CSP indiquait que le script Google Ads était bloqué, alors j’ai ajouté
https://pagead2.googlesyndication.com
à la liste des sources de script CSP, et mes publicités Google AdSense ont commencé à s’afficher (je suis un peu surpris qu’il faille encore faire cela même avec le plugin AdSense installé). Cependant, ce que j’ai remarqué, c’est que lorsque mes publicités internes (House Ads) sont réglées à 100 % (de sorte que seul mon script est appelé), je ne reçois AUCUNE notification CSP indiquant un problème. Cela me laisse donc aussi perplexe qu’avant. Le code des publicités internes est dans le HTML (encodé) et apparaît comme ci-dessus dans la vue d’inspection du navigateur.
Y a-t-il quelque chose qui bloque la sortie sans déclencher d’avertissement CSP ?
La sortie utilise document.write pour créer l’espace publicitaire. Je suppose que c’est le coupable. La sortie ressemble à ceci :
Lol… si je mettais la sortie du script ici en texte, elle se générait parfaitement. Doh…
J’ai trouvé ce sujet avec un problème similaire, mais cette personne a résolu le problème par elle-même et est clairement plus compétente en JavaScript que moi.
Comme lui, je suis prêt à payer quelqu’un pour de l’aide sur ce sujet.
Donc… tout cela est lié à la CSP (je suppose), car le site est configuré sur ‘unsafe-inline’ pour les données, et j’essaie de charger le script de mon serveur publicitaire via une URL contenant des variables. Je sais… c’est très barbare de ma part.
Alors… QUELQU’UN ? Y a-t-il une solution simple à ce problème, ou devrais-je simplement abandonner ?
La bonne solution consiste à ne pas utiliser l’inline et à le réécrire pour s’intégrer aux emplacements (outlets) existants des modèles EmberJS. Si vous cherchez une solution temporaire, vous pouvez désactiver la CSP dans les paramètres du site pendant que vous travaillez sur les modifications de votre solution de publicités personnalisée. Sachez simplement que cela peut vous exposer à des attaques XSS.
Où la politique de sécurité du contenu (CSP) est-elle déclarée ? Je ne vois aucune balise meta à ce sujet. S’agit-il simplement des paramètres par défaut du HTML 5 supposés par chaque navigateur ?
Merci, Falco. Plutôt que de désactiver toute la protection, existe-t-il un moyen de mettre en liste blanche des chaînes de données uniquement pour l’URL du serveur publicitaire et d’autoriser ces variables ? Ou… simplement désactiver l’exigence de « unsafe-inline data » ?
Je ne vois malheureusement pas cette option décrite dans l’article que vous avez lié.
Et pourtant, la publicité ne s’affiche toujours pas dans la section principale du site, seulement dans le pied de page où elle est installée dans le thème, dans <body>. J’ai réalisé qu’il y avait une balise <noscript> autour de la section centrale, tandis que celle du pied de page est en dehors de la fermeture de </noscript>, alors peut-être que c’est pour cela ?
J’ai vérifié dans Firefox et ma console n’affiche maintenant aucun avertissement CSP. Je ne sais pas pourquoi je ne voyais jamais ces avertissements dans Chrome au départ.
Discourse est une application monopage et tout le balisage des pages est généré côté client via notre application EmberJS.
L’utilisation de manipulations directes du DOM comme document.write est en conflit direct avec l’ensemble du système et a très peu de chances de « fonctionner simplement ».
Je vous recommande d’essayer d’adapter votre système de publicités pour utiliser notre système Publicités internes dans le plugin officiel de publicité. Peut-être pouvez-vous avoir une seule publicité dans l’inventaire des publicités internes et utiliser le hook de changement de page pour contacter le serveur publicitaire et remplacer la publicité par la réponse ? Ou peut-être que votre système de publicités peut écrire directement dans l’inventaire des publicités internes via l’API ?
Merci pour ton aide, Falco. C’est un peu effrayant, mais le code de ce serveur publicitaire a été écrit avant la création du terme API, donc… oui, je ferais mieux de développer un tout nouveau système de serveur publicitaire à partir de zéro. Je n’ai simplement pas le temps pour cela en ce moment, car je déploie ce nouveau forum ainsi que 6+ nouveaux sites de contenu.
Je vais essayer quelques alternatives à document.write et voir si cela peut fonctionner.