- Quando si dispone di un editor di testo avanzato su un'applicazione Web, qual è il modo migliore per sfuggire alle entità HTML e prevenire gli attacchi XSS mantenendo la formattazione (
<b>
,<i>
,<u>
, ... ecc.) ?
<b>
, <i>
, <u>
, ... ecc.) ? La Content-Security Policy o CSP ti consente di creare una pagina di HTML controllato dall'utente che non esegue JavaScript, e quindi non XSS.
Questo sta dicendo al browser di non eseguire JavaScript, che è molto più strong del filtraggio dell'output, e l'utilizzo di entrambi migliorerà la sicurezza. Librerie di filtri HTML come HTMLPurifer , antisammy, safehtml , hanno tutti avuto numerosi bypass e quindi non dovrebbero essere usati come unico mezzo di difesa. Questi sono filtri molto complessi e la complessità è il peggior nemico della sicurezza .
Le cose più importanti in questo caso sono la sicurezza. Vogliamo fornire del testo HTML all'utente o forse da noi stessi, quindi archiviarlo per l'esame in DB, quindi scaricarlo e visualizzarlo nelle pagine Web senza temere alcun tipo di attacco e abusato da utenti con cattive intenzioni. Sono stato ricercato sul modo migliore di farlo per circa 4 giorni e ho trovato 2 modi di base. Per favore lasciatemi parlare di un'altra cosa importante che molti IDE nello sviluppo di app Web hanno alcune regole di base per prevenire o mettere in guardia sulla pubblicazione di HTML che è la prima trincea contro le vulnerabilità. Hai due modi per passare questo.
1) Codifica HTML e post in modo che IDE non possa trovare alcun tag HTML e consenta ai dati di postare, in modo che tu possa salvarlo e ogni volta ottenerlo, decodificarlo e utilizzarlo. Puoi usare classi e estensioni preparate o scrivere le tue. Di seguito sono riportati alcuni esempi in .Net environment o js / jQuery perché sono uno sviluppatore .Net e sicuramente esistono gli stessi articoli su altri framework:
e questo è il mio test su alcune funzioni js / jQuery possono farlo: link
2) Disabilita la convalida da una pagina o dall'intera app, sotto il collegamento si trova in. Net: link
Ma suggerisco di usare l'attributo AllowHTML: link
E potrei leggere la mia risposta: link
Per prima cosa ho pensato che il modo migliore fosse codificare l'HTML e postare, salvare e decodificare come puoi vedere in secondo luogo nella parte più alta della mia risposta, ma poi penso se cambiasse le mie regole sul filtraggio e sulla visualizzazione dei tag HTML. Non so se la codifica abbia perso alcune cose in un determinato HTML. Tranne che voglio solo memorizzare html e la sezione più importante di pericolo è quando riesco a recuperarlo e scrivere in risposta, così ho deciso di usare Consenti post HTML solo per un campo speciale con l'attributo [AllowHTML]. Quindi ottengo l'HTML come utente di scrittura (posso fare alcune limitazioni nei tag come molti editor HTML) e salvarlo in DB. Ora abbiamo HTML e abbiamo bisogno di ottenerlo e mostrarlo nella pagina. Questo è il luogo in cui vengono gli attaccanti. Qualsiasi script in HTML può essere eseguito, Frame può caricare e ... quindi cosa possiamo fare? Dovremmo Sanitizzare l'HTML e questo significa eliminarlo dalle parti pericolose. Potremmo 1) Utilizzare alcuni strumenti preparati per lo stesso di:
O 2) Utilizzando un parser HTML, rimuovi ogni elemento suggerito pericoloso con Blacklist o whitelist. Qualche parser HTML esiste con contro e pro puoi cercare e confrontarli. Ho raggiunto Html Agility Pack nel link e CsQuery in link o pagato awesomium in link
Confronto di Html Agility Pack VS CsQuery è in link
After All I read Questo fantastico articolo link e ha deciso di analizzare HTML e disinfettare con le mie funzioni. Per ora uso HAP ma ho in programma di utilizzare CsQuery al più presto a causa delle sue prestazioni.
Spero che questo aiuto.
Leggi altre domande sui tag html web-application xss attack-prevention