Nessun `Referer:`, nessun embedding

Ciao,

Utilizziamo l’embedding di Discourse per Jekyll su New ROOT Web Site! - ROOT e funziona perfettamente! A meno che il browser non stia sopprimendo l’intestazione Referer:, nel qual caso otteniamo un errore 400 Bad Request. Provate voi stessi: se passate a una finestra privata di Firefox (che sopprime i referrer), l’embedding si rompe. Lo stesso vale per Safari, che sembra essere un po’ più rigoroso nella concessione dei referrer.

Ho verificato controllando New ROOT Web Site! - Blog - ROOT Forum in una finestra privata di Firefox, che mi restituisce un HTTP 400; poi modificando la richiesta per aggiungere Referer: https://root.cern/blog/new-web-site/ e il 400 diventa un 200 di successo.

Abbiamo abilitato “embed any origin”. Abbiamo commenti per esattamente un sito di embedding. Esiste un modo per farlo funzionare?

Ciao, Axel.

Sì, riesco a riprodurlo.

È interessante notare che i commenti incorporati su https://blog.codinghorror.com/the-cloud-is-just-someone-elses-computer/ funzionano senza problemi in una finestra privata di Firefox. Potrebbe il problema essere legato al dominio? Il tuo blog si trova su root.cern e il tuo modulo su root-forum.cern.ch.

Ciao Simon,

Grazie per aver esaminato la questione! Potrebbe benissimo essere correlato alla differenza nei nomi di dominio: potrei immaginare che i browser forniscano i referrer per una richiesta allo stesso dominio, ma non a un dominio diverso. Tuttavia, sebbene ciò sia interessante, non vedo ancora cosa possiamo fare per risolvere il problema: non potremo utilizzare root.cern come dominio del forum, e quell’incorporamento cross-domain sembrava una funzionalità chiave e super utile… È semplicemente a rischio in questi tempi, data la maggiore attenzione alla privacy, o riesci a pensare a una soluzione?

Qualcosa che potrei voler provare è l’uso di un reverse proxy da root.cern/forum a root-forum.cern.ch. In questo modo, l’incorporamento può essere eseguito come se fosse sullo stesso host, e manteniamo il referrer…? Torno presto a parlarti :slight_smile:

Un saluto,
Axel

Ciao,

Ho ora una soluzione molto più semplice. Probabilmente dovrebbe essere evidenziata in Embed Discourse comments on another website via Javascript :

Per l’incorporamento tra siti diversi, nelle pagine di incorporamento, aggiungi uno dei seguenti:

  • <meta name="referrer" content="strict-origin"> con Path Allowlist impostato su /.* (poiché non verrà fornito alcun percorso), oppure
  • <meta name="referrer" content="no-referrer-when-downgrade"> con l’effettiva Path Allowlist.

Come menzionato in Referrer-Policy header - HTTP | MDN, “c’è uno sforzo da parte dei browser per passare a un valore predefinito più restrittivo”, e l’incorporamento di Discourse si basa sul vecchio valore predefinito per l’incorporamento tra host diversi.

Cordiali saluti, Axel.

Dato che questo diventerà lo standard predefinito del browser da Chrome 85 in poi (A new default Referrer-Policy for Chrome - strict-origin-when-cross-origin  |  Blog  |  Chrome for Developers), dovremmo valutare un’alternativa qui?

Possiamo accettare le richieste che soddisfano tutte le seguenti tre condizioni:

  • La richiesta contiene sia discourseEmbedUrl che Referer
  • Il referer è impostato sull’origine di discourseEmbedUrl
  • discourseEmbedUrl corrisponde a una delle regole di incorporamento

Penso che passare discourseEmbedUrl sia semplice da realizzare per la maggior parte degli utenti.

Solo un avvertimento, Tejas: per quanto ne so, senza il tag meta, Safari e Firefox/Modalità privata sopprimono completamente l’header Referer. Ciò che suggerisci potrebbe funzionare per Chrome >= 85, ma aggiungere il tag meta sembra più robusto e generale; sospetto inoltre che sia sufficientemente semplice per la maggior parte degli embedding.