Qual è la differenza tra AntiXss.HtmlEncode e HttpUtility.HtmlEncode?

Ho appena trovato una domanda con una risposta che suggerisce la libreria AntiXss per evitare lo scripting cross-site. Sembra interessante, leggendo il blog di msdn , sembra solo fornire un metodo HtmlEncode (). Ma io già uso HttpUtility.HtmlEncode ().

Perché dovrei voler utilizzare AntiXss.HtmlEncode su HttpUtility.HtmlEncode?

In effetti, non sono il primo a porre questa domanda. E, in effetti, Google presenta alcune risposte , principalmente

  • Una white list invece di un approccio black list
  • Un miglioramento delle prestazioni di 0,1 ms

Bene, è carino, ma cosa significa per me? Non mi interessa molto delle prestazioni di 0.1 ms e non mi sembra davvero di scaricare e aggiungere un’altra dipendenza di libreria per funzionalità che ho già.

Esistono esempi di casi in cui l’implementazione di AntiXss impedirebbe un attacco che l’implementazione di HttpUtility non avrebbe?

Se continuo a utilizzare l’implementazione HttpUtility, sono a rischio? Che dire di questo ‘bug’ ?

Non ho una risposta specifica alla tua domanda, ma vorrei sottolineare che la lista bianca contro la lista nera non si avvicina solo al “bello”. È importante. Molto importante. Quando si parla di sicurezza, ogni piccola cosa è importante. Ricorda che con lo scripting cross-site e la falsificazione di richieste cross-site , anche se il tuo sito non mostra dati sensibili, un hacker potrebbe infettare il tuo sito iniettando javascript e utilizzarlo per ottenere dati sensibili da un altro sito. Quindi farlo correttamente è fondamentale.

Le linee guida OWASP specificano l’utilizzo di un approccio alla lista bianca . Le linee guida sulla conformità PCI lo specificano anche negli standard di codifica (poiché si riferiscono alle linee guida OWASP).

Inoltre, la versione più recente della libreria AntiXss ha una nuova funzione: .GetSafeHtmlFragment () che è utile per quei casi in cui si desidera memorizzare HTML nel database e visualizzarlo all’utente come HTML.

Inoltre, per quanto riguarda il “bug”, se stai codificando correttamente e seguendo tutte le linee guida sulla sicurezza, stai usando stored procedure parametrizzate, quindi le virgolette singole saranno gestite correttamente, Se non stai codificando correttamente, non distriggersre la libreria degli scaffali ti proteggerà completamente. La libreria AntiXss è pensata per essere uno strumento da utilizzare, non un sostituto per la conoscenza. Affidarsi alla libreria per farlo nel modo giusto per te si sarebbe aspettato un buon pennello per realizzare dei buoni dipinti senza un buon artista.

Modifica – Aggiunto

Come richiesto nella domanda, un esempio di dove l’anti xss ti proteggerà e HttpUtility non:

HttpUtility.HtmlEncode e Server. HtmlEncode non impedisce Cross Scripting Site

Questo è secondo l’autore, però. Non l’ho provato personalmente.


Sembra che tu sia in linea con le tue linee guida sulla sicurezza, quindi questo potrebbe non essere qualcosa che ho bisogno di dirti, ma nel caso uno sviluppatore meno esperto stia leggendo questo, la ragione per cui dico che l’approccio alla white list è fondamentale è questo.

In questo momento, HttpUtility.HtmlEncode può bloccare con successo ogni attacco, semplicemente rimuovendo / codificando < e > , oltre a pochi altri personaggi "conosciuti potenzialmente pericolosi", ma qualcuno cerca sempre di pensare a nuovi modi di irrompere. Consentire solo un contenuto sicuro (lista bianca) è molto più semplice che tentare di pensare a tutti i possibili input non sicuri che un utente malintenzionato potrebbe lanciare contro di te (approccio con lista nera).

In termini di perché dovresti usarne uno sull’altro, considera che la libreria AntiXSS viene rilasciata più spesso del framework ASP.NET, poiché, come dice David Stratton, “qualcuno cerca sempre di pensare a nuovi modi di irrompere”, quando qualcuno ne trova uno, la libreria AntiXSS ha molte più probabilità di ottenere una versione aggiornata per difendersi da esso.

Le seguenti sono le differenze tra Microsoft.Security.Application.AntiXss.HtmlEncode metodi Microsoft.Security.Application.AntiXss.HtmlEncode e System.Web.HttpUtility.HtmlEncode :

  1. Anti-XSS utilizza la tecnica di white list, a volte indicata come principio di inclusione, per fornire protezione contro gli attacchi XSS (Cross-Site Scripting). Questo approccio funziona definendo innanzitutto un set di caratteri valido o consentito e codifica qualsiasi cosa al di fuori di questo set (caratteri non validi o potenziali attacchi). System.Web.HttpUtility.HtmlEncode e altri metodi di codifica in tale spazio dei nomi utilizzano il principio di esclusioni e codificano solo determinati caratteri designati come potenzialmente pericolosi come <,>, ed e ‘caratteri.

  2. L’elenco di caratteri bianchi (o sicuri) della Biblioteca Anti-XSS supporta più di una dozzina di lingue (greco e copto, cirillico, supplemento cirillico, armeno, ebraico, arabo, siriaco, arabo, Thaana, NKo e altro)

  3. La libreria Anti-XSS è stata progettata appositamente per mitigare gli attacchi XSS, mentre i metodi di codifica HttpUtility vengono creati per garantire che l’output di ASP.NET non infranga l’HTML.

  4. Prestazioni: il delta medio tra AntiXss.HtmlEncode() e HttpUtility.HtmlEncode() è di +0.1 millisecondi per transazione.

  5. Anti-XSS versione 3.0 fornisce un cablaggio di prova che consente agli sviluppatori di eseguire sia la verifica XSS che i test delle prestazioni.

La maggior parte delle vulnerabilità XSS (qualsiasi tipo di vulnerabilità, in realtà) si basa esclusivamente sul fatto che la sicurezza esistente non “si aspettava” che accadessero certe cose. Gli approcci solo nella whitelist sono più adatti a gestire questi scenari per impostazione predefinita.

Utilizziamo l’approccio white-list per i siti Windows Live di Microsoft. Sono sicuro che ci sia un numero qualsiasi di attacchi alla sicurezza che non abbiamo ancora pensato, quindi sono più a mio agio con l’approccio paranoico. Sospetto che ci siano stati casi in cui la lista nera ha esposto vulnerabilità che la white-list non ha, ma non ho potuto dirti i dettagli.