2009-08-03 15 views
5

Ho la situazione comune in cui ho input utente che utilizza un sottoinsieme di HTML (input con tinyMCE). Ho bisogno di avere una protezione lato server contro gli attacchi XSS e sto cercando uno strumento ben collaudato che le persone stanno usando per fare questo. Sul lato PHP sto vedendo molte librerie come HTMLPurifier che fanno il lavoro, ma non riesco a trovare nulla in .NET.Whitelist HTML .NET (anti-xss/Cross Site Scripting)

praticamente sto cercando per una libreria per filtrare verso il basso per una whitelist di tag, attributi questi tag, e fa la cosa giusta con "difficile" attributi come un: href e img: src

I' Ho visto il post di Jeff Atwood allo http://refactormycode.com/codes/333-sanitize-html, ma non so quanto sia aggiornato. Ha alcuna influenza su ciò che il sito sta attualmente utilizzando? E in ogni caso non sono sicuro di sentirmi a mio agio con quella strategia di cercare di dare un input valido.

questo post del blog delinea quello che sembra essere una strategia molto più convincente:

http://blog.bvsoftware.com/post/2009/01/08/How-to-filter-Html-Input-to-Prevent-Cross-Site-Scripting-but-Still-Allow-Design.aspx

Questo metodo è quello di analizzare in realtà il codice HTML in un DOM, verificare che, quindi rigenerare HTML valido da esso. Se l'analisi HTML è in grado di gestire l'HTML malformato in modo sensato, allora è grandioso. In caso contrario, non è un grosso problema: posso richiedere un HTML ben formato poiché gli utenti dovrebbero utilizzare l'editor minuscolo MCE. In entrambi i casi sto riscrivendo quello che so essere un HTML sicuro e ben formato.

Il problema è che è solo una descrizione, senza un collegamento a qualsiasi libreria che esegue effettivamente tale algoritmo.

Esiste una tale biblioteca? In caso contrario, quale sarebbe un buon motore di analisi HTML .NET? E quali espressioni regolari dovrebbero essere utilizzate per eseguire una validazione extra a: href, img: src? Mi manca qualcos'altro di importante qui?

Non voglio reimplementare una ruota buggy qui. Sicuramente ci sono alcune librerie comunemente usate là fuori. Qualche idea?

risposta

3

Beh, se si desidera analizzare e si è preoccupati per l'input HTML (x) non valido, lo HTML Agility Pack è probabilmente la cosa migliore da utilizzare per l'analisi. Ricorda però che non si tratta solo di elementi, ma anche di attributi sugli elementi consentiti da consentire (ovviamente si dovrebbe lavorare su una lista bianca consentita di elementi e relativi attributi, piuttosto che cercare di eliminare cose che potrebbero essere azzardate tramite una lista nera)

C'è anche il OWASP AntiSamy Project che è un lavoro in corso in corso - hanno anche una test site si può provare a XSS

Regex per questo è probabilmente troppo rischioso IMO.

+0

Il pacchetto di agilità è quello che ho finito con l'uso. Sembra funzionare bene – Clyde

1

Ho avuto lo stesso identico problema alcuni anni fa quando stavo usando TinyMCE.

Ancora non sembrano esserci soluzioni decenti per l'elenco bianco XSS/HTML per .Net, quindi ho caricato una soluzione che ho creato e che utilizzo da alcuni anni.

http://www.codeproject.com/KB/aspnet/html-white-listing.aspx

L'elenco defnintion bianco si basa su validi elementi di TinyMCE.

Take Two: Guardandosi intorno, Microsoft ha recentemente rilasciato un white-list basata Anti-XSS Library (V3.0), verificare che fuori:

Il Microsoft Anti-Cross Site Scripting Biblioteca V3 .0 (Anti-XSS V3.0) è una libreria di codifica progettata per per aiutare gli sviluppatori a proteggere le loro applicazioni basate su Web ASP.NET dagli attacchi XSS . Si differenzia dalla maggior parte delle librerie di codifica in quanto utilizza la tecnica di elenco bianco - a volte inclusioni - per fornire protezione contro attacchi XSS.Questo approccio funziona definendo innanzitutto un set di caratteri valido o consentito, e codifica qualsiasi cosa all'esterno di questo set (caratteri non validi o potenziali attacchi ). L'approccio con white list offre numerosi vantaggi rispetto agli altri schemi di codifica . Le nuove funzionalità di questa versione della Microsoft Anti-Cross Site Scripting Biblioteca includono: - Un ampliato lista bianca che supporta più lingue - Prestazioni migliorate - schede Performance (in linea aiuto) - Supporto per Shift_JIS codificano per i browser mobili - un'applicazione di esempio - Sicurezza Runtime Engine modulo (SRE) HTTP

3

Microsoft ha una libreria open-source per la protezione contro XSS: AntiXSS.

+0

Cosa c'è di sbagliato in questa risposta? Perché è stato downvoted? –

+2

Bene AntiXSS è solo una codifica, non è una soluzione di spogliarellista o di whitelist (ancora) – blowdart

+1

OK, grazie. Non l'ho usato da solo, quindi probabilmente dovrei limitarmi a raccomandare cose che conosco. –

2

http://www.microsoft.com/en-us/download/details.aspx?id=28589 È possibile scaricare una versione qui, ma l'ho collegata per l'utile file DOCX. Il mio metodo preferito è utilizzare il gestore pacchetti NuGet per ottenere l'ultimo pacchetto AntiXSS.

È possibile utilizzare l'assembly HtmlSanitizationLibrary trovato nella libreria 4.x di AntiXss. Si noti che GetSafeHtml() si trova in HtmlSanitizationLibrary, sotto Microsoft.Security.Application.Sanitizer.

0

https://github.com/Vereyon/HtmlRuleSanitizer risolve esattamente questo problema.

Ho avuto questa sfida quando ho integrato l'editor wysihtml5 in un'applicazione ASP.NET MVC. Ho notato che aveva un disinfettante basato sulla lista bianca molto bello ma semplice che usava le regole per consentire il passaggio di un sottoinsieme di HTML. Ho implementato una versione lato server di esso che dipende dal pacchetto HtmlAgility per l'analisi.

Microsoft Web Protection Library (ex AntiXSS) sembra semplicemente strappare quasi tutti i tag HTML e da quello che ho letto non è possibile adattare facilmente le regole al sottoinsieme HTML che si desidera utilizzare. Quindi non era un'opzione per me.

Anche questo HTML sanitizer sembra molto promettente e sarebbe la mia seconda scelta.