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.

4 Mi Piace

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.

2 Mi Piace

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

2 Mi Piace

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.

2 Mi Piace

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.