Bug(s) nella gestione dei URI da parte di Discourse nei contenuti markdown

urn:records:test:3 è un URI valido RFC 3986.

Discourse non lo gestisce correttamente, indipendentemente dal markdown utilizzato.

  • Incollalo semplicemente, come un URI HTTP, e Discourse ignora completamente il fatto che sia un URI, come qui: urn:records:test:3.

  • Avvolgilo in <>, come <urn:records:test:3>, e Discourse inverte gli ultimi due segmenti, come qui: urn:records:3:test. Con il tasto destro del mouse e copia, otterrai urn:records o test:3, a seconda della posizione esatta del cursore del mouse. Con il tasto sinistro, non succede nulla, perché non viene trattato esattamente come un URI.

  • Inseriscilo in un markup di link completo, ovvero [testo su `urn:records:test:3`](urn:records:test:3), e Discourse rimuove l’ultimo segmento dal URI copiabile con il tasto destro (e ancora una volta non cliccabile direttamente), come qui in testo su urn:records:test:3, dove un copia con il tasto destro restituirà urn:records:test, oppure come in [`urn:records:test:3`](urn:records:test:3), come qui in urn:records:test:3, dove un copia con il tasto destro restituirà urn:records:test o 3, a seconda della posizione esatta del cursore del mouse.

Non ho eseguito test esaustivi su tutte le costruzioni URI valide. urn:records:test:3 è semplicemente un esempio locale reale.

3 Mi Piace

Infatti, l’impostazione del sito allowed_href_schemes funziona solo con gli schemi che utilizzano il formato scheme://.

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/pretty-text/addon/sanitizer.js#L59

4 Mi Piace

Non riesco a capire se si stia ammettendo un bug o se si stia dicendo “sì, questo è il comportamento previsto”…

Potresti chiarire?

1 Mi Piace

Si tratta effettivamente di un bug. È causato dal nostro codice di sanificazione che riconosce solo gli schemi href che iniziano con il formato schema://.

5 Mi Piace

Ho appena riscontrato questo bug con l’URI geo, che ha questo aspetto: geo:36.95733984,-122.0172856.

Vedo che esiste un’eccezione per l’URI tel:

    if (allowedHrefSchemes.includes("tel")) {
      extraHrefMatchers.push(new RegExp("^tel://\\+?[\\w\\.\\-]+", "i"));

C’è Uniform Resource Identifier (URI) Schemes, ma ho utilizzato List of URI schemes - Wikipedia per verificare gli schemi, dato che includono degli esempi. Sto osservando il “suffisso” del nome dello schema, ovvero :// (come si chiama esattamente? “Formato dello schema”?).

Da un’attenta ispezione visiva, sembra che esistano solo tre pattern utilizzati:

  • ://
  • :/
  • :

La mia mente fa fatica a tracciare dove ciò avvenga in relazione alla scrittura del markdown e alla conversione in href, ma penso che se riusciamo a capire come controllare questi tre formati, dovremmo essere al sicuro per qualsiasi schema aggiunto dall’amministratore.

Non ho idea di come validare per singolo schema… :thinking:


I miei codici non ufficiali per i formati:

  • : “osservante”
  • :/ “scettico”
  • :// - “doppiamente scettico”
1 Mi Piace

Copia e incolla quanto segue in Discourse:

Per messaggi e chiamate sicuri, contattami su Snikket/XMPP all’indirizzo xmpp:maiki@chat.v2.talkgroup.xyz.

Genera (con xmpp aggiunto a allowed href schemes):

Per messaggi e chiamate sicuri, contattami su Snikket/XMPP all'indirizzo <a href="mailto:xmpp:maiki@chat.v2.talkgroup.xyz" dir="ltr">xmpp:maiki@chat.v2.talkgroup.xyz</a>.

Il problema in questo caso è href="mailto:xmpp:maiki@chat.v2.talkgroup.xyz". Lo segnalo come caso d’uso per questo bug. :slight_smile:

2 Mi Piace

Può esserci in qualche modo una soluzione per gli URI GEO? Non sono uno sviluppatore.