J’exécute une instance auto-hébergée de Discourse sur forum.embeetle.com. Elle fonctionne bien depuis plusieurs années maintenant.
Ce matin, j’ai remarqué que toute interaction au clavier et à la souris avec le forum dans le navigateur avait cessé de fonctionner. Je peux charger n’importe quelle page du forum, mais je ne peux pas faire défiler, me connecter, rechercher, …
J’ai essayé Firefox et Chromium : même problème.
Les outils de développement de Firefox affichent cette erreur :
Content-Security-Policy : Les paramètres de la page ont bloqué le chargement d'une ressource à l'adresse inline (« script-src »). forum.embeetle.com:362:10
Je n’ai pas effectué de mises à jour récemment ni installé de nouveaux plugins.
Des suggestions sur la façon dont je peux déboguer et résoudre ce problème ?
À ma connaissance, j’ai une installation standard basée sur Docker, à l’exception du fait que je l’exécute derrière un proxy inverse Nginx. Configuration Nginx ci-dessous (je ne suis pas sûr qu’elle soit pertinente) :
Je ne me souviens pas avoir jamais défini de thème par défaut, mais peut-être que je l’ai fait et que j’ai oublié.
J’aimerais désactiver temporairement les thèmes par défaut, afin que notre forum soit utilisable pendant que nous trouvons ce qui ne va pas avec les thèmes. Comment puis-je faire cela, si je ne peux accéder aux pages d’administration qu’avec les thèmes désactivés ? En mode sans échec, tous les thèmes sont déjà désactivés, et les activer puis les désactiver à nouveau ne semble avoir aucun effet.
Il y a trois thèmes disponibles (voir ci-dessous). Aucun d’entre eux n’est activé par défaut.
Étrange, pour moi dans Safari, il signale qu’il refuse d’exécuter la ligne 315. C’est le script inline pour le préchargeur Discourse-spash. Donc, pas lié au thème.
Pour une solution immédiate, vous pourriez désactiver le CSP à l’aide d’un paramètre de site :
Je spécule : si le problème persiste, il pourrait s’agir de votre environnement serveur qui envoie quelque chose d’inattendu. Ou un autre script qui interfère (exécutez-vous des plugins personnalisés ou d’autres scripts ?)
Notez que cela vous laissera dans un état vulnérable et devrait être corrigé dès que possible. Mais au moins, votre forum fonctionnera à nouveau.
J’ai mis en œuvre une autre solution de contournement pour l’instant, en ajoutant une réécriture dans la configuration nginx (au niveau du serveur) comme suit :
rewrite ^(.*)$ $1?safe_mode=no_themes break;
Ainsi, les visiteurs utiliseront le mode sans échec par défaut maintenant.
Pour permettre une exploration plus approfondie de ce problème, j’ai également dupliqué le serveur de forum sans le rewrite à l’adresse https://raw.forum.embeetle.com. Si vous visitez cette URL, vous verrez toujours le problème d’origine.
Je n’utilise aucun script personnalisé. J’utilise certains plugins, j’expérimenterai si la désactivation de l’un d’entre eux a un effet.
Trouvé : c’était bien un problème avec ma configuration nginx qui a maintenant accidentellement émis un en-tête Content-Security-Policy trop strict pour Discourse.
La suppression de Content-Security-Policy a résolu mon problème.