Pas de `Referer:`, pas d'intégration

Bonjour,

Nous utilisons l’intégration de Discourse pour Jekyll sur New ROOT Web Site! - ROOT – cela fonctionne parfaitement ! Sauf lorsque le navigateur supprime l’en-tête Referer:, auquel cas nous obtenons une erreur 400 Bad Request. Essayez par vous-même : si vous ouvrez une fenêtre privée Firefox (qui supprime les référents), l’intégration ne fonctionne plus. Il en va de même pour Safari, qui semble être un peu plus strict concernant la transmission des référents.

J’ai vérifié en consultant New ROOT Web Site! - Blog - ROOT Forum dans une fenêtre privée Firefox, ce qui m’a renvoyé un HTTP 400 ; puis en modifiant la requête pour ajouter Referer: https://root.cern/blog/new-web-site/, l’erreur 400 s’est transformée en un succès 200.

Nous avons bien activé l’option « intégrer n’importe quelle origine ». Nous n’avons des commentaires que pour un seul site d’intégration. Existe-t-il un moyen de faire en sorte que cela fonctionne ?

Cordialement,
Axel.

4 « J'aime »

Oui, je peux reproduire le problème.

Il est intéressant de constater que les commentaires intégrés sur https://blog.codinghorror.com/the-cloud-is-just-someone-elses-computer/ fonctionnent sans problème dans une fenêtre privée de Firefox. Le problème pourrait-il être lié au domaine ? Votre blog se trouve sur root.cern et votre formulaire sur root-forum.cern.ch.

2 « J'aime »

Salut Simon,

Merci d’avoir examiné cela ! Cela pourrait très bien être lié à la différence de noms de domaine : j’imagine que les navigateurs fournissent des référents pour une requête vers le même domaine, mais pas vers un domaine différent. Mais bien que cela soit intéressant, je ne vois pas encore ce que nous pouvons faire pour résoudre ce problème — nous ne pourrons pas utiliser root.cern comme domaine du forum, et cette intégration interdomaine semblait être une fonctionnalité clé et très utile… Est-ce simplement un risque aujourd’hui, compte tenu de l’amélioration de la vie privée, ou penses-tu à une solution ?

Une chose que je pourrais essayer est de mettre en place un proxy inverse de root.cern/forum vers root-forum.cern.ch. Ainsi, l’intégration peut être effectuée comme si elle se trouvait sur le même hôte, et nous conservons le référent… ? Je reviens vers toi :slight_smile:

Salutations,
Axel

2 « J'aime »

Bonjour,

J’ai maintenant une solution beaucoup plus simple. Cela devrait probablement être mentionné dans Embed Discourse comments on another website via Javascript :

Pour l’intégration inter-sites, ajoutez sur les pages d’intégration soit

  • <meta name="referrer" content="strict-origin"> avec Path Allowlist défini sur /.* (car aucun chemin ne sera fourni), soit
  • <meta name="referrer" content="no-referrer-when-downgrade"> avec la véritable Path Allowlist.

Comme mentionné dans Referrer-Policy header - HTTP | MDN, « les navigateurs s’efforcent de passer à une valeur par défaut plus stricte », et l’intégration de Discourse repose sur l’ancien comportement par défaut pour l’intégration entre hôtes différents.

Cordialement, Axel.

2 « J'aime »

Étant donné que cela deviendra la norme par défaut pour les navigateurs à partir de Chrome 85 (https://developers.google.com/web/updates/2020/07/referrer-policy-new-chrome-default), devrions-nous envisager une alternative ici ?

Pouvons-nous accepter les requêtes qui répondent aux trois conditions suivantes :

  • La requête contient à la fois discourseEmbedUrl et Referer
  • Le referer est défini sur l’origine de discourseEmbedUrl
  • discourseEmbedUrl correspond à l’une des règles d’intégration

Je pense que transmettre discourseEmbedUrl serait facile à mettre en œuvre pour la majorité des utilisateurs.

Juste un avertissement, Tejas - À ma connaissance, sans la balise meta, Safari et Firefox / Navigation privée suppriment complètement l’en-tête Referer. Ce que vous proposez pourrait fonctionner pour Chrome >= 85, mais ajouter la balise meta semble plus robuste et général, et je soupçonne que c’est suffisamment trivial pour la plupart des intégrations ?