2011-12-12 11 views
6

Ho letto che la codifica HTML sulla via del ritorno dal server al client (credo?) E questo impedirà molti tipi di attacchi XSS. Tuttavia, non capisco affatto. L'HTML sarà ancora consumato e reso dal browser giusto?Perché la codifica HTML impedisce determinati attacchi XSS?

Come si ferma questo?

Ho letto su questo in più posizioni, siti Web e libri, e in nessun luogo spiega in realtà perché funziona.

+1

Non sono sicuro del motivo per cui qualcuno farebbe una risposta negativa a questa domanda. Mi sembra abbastanza ragionevole.Inoltre è importante avere una buona conoscenza di come funzionano le vulnerabilità del web in modo che possano essere evitate. – zzzzBov

risposta

10

Pensateci: come è il codice HTML codificato? Ad esempio, potrebbe assomigliare a questo:

<a href="www.stackoverflow.com"> 

così sarà il rendering sul client, come i letterali (come < a href = "www.stackoverflow.com" >), non come HTML. Significa che non vedrai un link effettivo, ma il codice stesso.

Gli attacchi XSS funzionano sulla base del fatto che qualcuno può far sì che un browser client analizzi l'HTML che il provider del sito non intendeva essere lì; se quanto sopra non fosse codificato, significherebbe che il collegamento fornito sarebbe incorporato nel sito, sebbene il fornitore del sito non lo volesse.

XSS è ovviamente un po 'più elaborato di quello, e di solito coinvolge anche JavaScript (da qui il Cross Site Scripting), ma a scopo dimostrativo questo semplice esempio dovrebbe essere sufficiente; è lo stesso con il codice JavaScript come con i tag HTML semplici, poiché XSS è un caso speciale dell'iniezione HTML più generale.

+1

OH! Questo ha senso ora. Quindi il browser * non * lo renderà come HTML. Ero nel contesto di ASP.NET MVC e in che modo utilizza la codifica HTML e pensavo che lo stesse usando per l'HTML effettivo che intendeva visualizzare. Ora capisco che lo stava usando solo in riferimento ai valori. – BigOmega

1

La codifica HTML diventa <div> in &lt;div&gt;, il che significa che qualsiasi markup HTML verrà visualizzato sulla pagina come testo, anziché essere eseguito come markup HTML.

Le entità di base che vengono convertiti sono:

  • & a &amp;
  • <-&lt;
  • >-&gt;
  • " a &quot;

OWASP recommends encoding some additional characters:

  • ' a &#x27;
  • / a &#x2F;

Queste codifiche sono come rappresentate testualmente personaggi che altrimenti sarebbero consumati come markup. Se si desidera scrivere a<b, è necessario fare attenzione che lo <b non venga trattato come un elemento HTML. Se si utilizza a&lt;b il testo che verrà visualizzato per l'utente sarà a<b.

Problemi correlati