Codificatore / Decodificatore di Entità HTML

Converti caratteri speciali in entità HTML (&, <, ©) o decodifica entità in testo leggibile — in entrambe le direzioni, in tempo reale.

959 visualizzazioni

Come Funziona

HTML riserva alcuni caratteri per la propria sintassi: < e > delimitano i tag, e & avvia un riferimento a un'entità. Se questi caratteri compaiono letteralmente all'interno di un contenuto che viene inserito in una pagina — un commento, un nome utente, una query di ricerca rimandata a video — il browser cerca di interpretarli come markup invece di mostrarli come testo. La codifica li converte nella loro forma di entità (&lt;, &gt;, &amp;) in modo che vengano visualizzati come i caratteri letterali invece di essere interpretati. La decodifica inverte questo processo, trasformando entità come &amp; o &#8217; nei caratteri reali che rappresentano.

Non si tratta di un dettaglio estetico — è un controllo di sicurezza. Se un campo commenti prende l'input dell'utente e lo inserisce nell'HTML della pagina senza prima codificarlo, un visitatore può digitare <script>...</script> e far sì che quello script venga effettivamente eseguito nel browser di ogni altro visitatore: questa classe di vulnerabilità si chiama Cross-Site Scripting (XSS), e codificare l'output non attendibile prima che tocchi l'HTML è la difesa standard contro di essa. Ad esempio, codificare il testo 5 < 10 & 10 > 5 produce 5 &lt; 10 &amp; 10 &gt; 5, che viene visualizzato correttamente e non può essere scambiato per markup.

Cosa Dovresti Sapere

  • Le entità con nome e quelle numeriche rappresentano lo stesso carattere in modo diverso. &apos; (con nome) e &#39; (numerica) significano entrambe una virgoletta singola, ma le entità con nome dipendono dal fatto che il parser riconosca quello specifico nome — le entità numeriche (decimali o esadecimali &#x) sono universalmente supportate e più sicure per l'output generato da macchine.
  • La codifica non è l'unica difesa. Protegge il contenuto testuale; attributi, URL e contesti JavaScript inline richiedono le proprie regole di escape, poiché un valore all'interno di href="javascript:..." o all'interno di un blocco <script> viene analizzato secondo regole diverse rispetto al normale testo del corpo.
  • La conversione è locale. Questo strumento usa il parser DOM nativo del tuo browser — nulla viene caricato o registrato.
  • Non tutti i linguaggi di templating lato server fanno l'auto-escape per impostazione predefinita. Alcuni (come il vecchio output PHP o la concatenazione di stringhe grezze) richiedono di chiamare esplicitamente una funzione di escape — dimenticarlo è una delle fonti più comuni di bug XSS nel mondo reale.
  • Alcune entità sembrano visivamente quasi identiche. Un apostrofo diritto (') e una virgoletta singola tipografica destra (&#8217;) vengono rese quasi allo stesso modo sullo schermo ma sono sequenze di byte diverse — una distinzione che conta negli esempi di codice o negli URL.

Un esempio concreto di prima/dopo: un campo commenti contenente Bel post! 5 < 10, vero? non richiede alcuna gestione speciale come testo semplice, ma nel momento in cui viene inserito in un template HTML senza escape, un visitatore malintenzionato potrebbe invece inviare <img src=x onerror=alert(1)> — la codifica trasforma tutto ciò in testo inerte e visibile invece di un gestore di errore immagine funzionante.

Domande Frequenti

Perché codificare il testo prima di inserirlo in HTML?

Un < o & non sottoposto a escape nel contenuto HTML può essere interpretato come markup, rompendo il layout della pagina o — molto peggio — permettendo l'esecuzione effettiva di tag <script> o <img onerror> iniettati (Cross-Site Scripting). Codificare in &lt; e &amp; mantiene il testo letterale e inerte, indipendentemente da ciò che un utente ha digitato.

Gestisce sia le entità con nome che quelle numeriche?

Sì — la decodifica riconosce sia le entità con nome (&amp;copy;) sia quelle numeriche, decimali (&amp;#169;) o esadecimali (&amp;#x00A9;). Tutte e tre rappresentano lo stesso carattere ©; lo strumento le normalizza tutte riportandole al glifo effettivo.

Perché usare un'entità numerica invece di una con nome, o viceversa?

Le entità con nome (&amp;apos;, &amp;hellip;) sono più leggibili nel codice sorgente, ma dipendono dal fatto che il parser riconosca quel nome esatto — alcune tra le meno comuni hanno un supporto incoerente negli strumenti più datati. Le entità numeriche (&amp;#39;, &amp;#8230;) sono comprese universalmente da qualsiasi parser HTML, indipendentemente dall'età o dal fornitore, motivo per cui gli strumenti automatizzati e le librerie di sanitizzazione spesso le preferiscono.

La sola codifica rende la mia pagina sicura da XSS?

Gestisce i nodi di testo, ma l'HTML ha altri contesti di iniezione — dentro il valore di un attributo, dentro un URL, dentro un blocco <script> o <style> — ciascuno richiede il proprio approccio di escape, poiché il parser del browser cambia regole a seconda di dove si trova nel documento. Codificare il contenuto testuale con entità è un livello essenziale, non l'intera difesa; un passaggio di "sanitizzazione" più ampio che rimuove o riscrive interi tag è uno strumento separato e più mirato, per quando si vuole intenzionalmente consentire un HTML limitato.

Il mio testo viene inviato da qualche parte?

No — la conversione avviene istantaneamente nel tuo browser usando il parser nativo del DOM; nulla viene caricato, registrato o memorizzato, il che lo rende sicuro anche per testare contenuti reali inviati dagli utenti, incluso qualsiasi cosa sospetti possa contenere un tentativo di iniezione.

Commenti

Ancora nessun commento — scrivi il primo!

Strumenti Simili