Escaping dell'output di rich text editor

8
  • 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.) ?
posta Awake Zoldiek 25.01.2014 - 01:06
fonte

2 risposte

12

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 .

    
risposta data 25.01.2014 - 22:49
fonte
0

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:

link

link

link

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:

link link link

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.

    
risposta data 26.08.2014 - 14:02
fonte

Leggi altre domande sui tag