Come utilizzare fckEditor in modo sicuro, senza il rischio di cross site scripting?

StackOverflow https://stackoverflow.com/questions/65734

  •  09-06-2019
  •  | 
  •  

Domanda

Questo collegamento descrive un exploit nella mia app utilizzando fckEditor:http://knitinr.blogspot.com/2008/07/script-exploit-via-fckeditor.html

Come posso rendere sicura la mia app mentre utilizzo ancora fckEditor?È una configurazione di fckEditor?È qualche elaborazione che dovrei eseguire sul lato server dopo aver preso il testo da fckEditor?

È un enigma perché fckEditor USI html per la sua formattazione, quindi non posso semplicemente codificare HTML quando visualizzo il testo.

È stato utile?

Soluzione

Disinfetta il lato server HTML, non c'è altra scelta.Per PHP lo sarebbe Purificatore HTML, per .NET non lo so.È complicato disinfettare l'HTML: non è sufficiente rimuovere i tag di script, devi anche fare attenzione ai gestori di eventi on* e anche di più, grazie ad esempio alle stupidità di IE.

Inoltre, con HTML e CSS personalizzati è facile modificare l'aspetto e il layout del tuo sito, utilizzando un overlay (posizionato in modo assoluto) che copre tutto lo schermo, ecc.Sii preparato per questo.

Altri suggerimenti

Il bug in realtà non è colpa di FCKeditors.Finché consenti agli utenti di modificare l'HTML che verrà visualizzato sul tuo sito web, avranno sempre la possibilità di causare danni a meno che non controlli i dati prima di visualizzarli.

Alcune persone usano la codifica HTML per fare ciò, ma ciò distruggerà tutta la formattazione eseguita da FCKeditor, non quella che desideri.


Forse puoi usare il Libreria di scripting Microsoft Anti-Cross Site.Campioni accesi MSDN

È qualche elaborazione che dovrei eseguire sul lato server dopo aver preso il testo da fckEditor?

Precisamente.Anche StackOverflow ha avuto alcuni problemi iniziali relativi a questo.Il modo più semplice per risolverlo è utilizzare una libreria HTML per analizzare l'input dell'utente e quindi eseguire l'escape di tutti i tag che non desideri nell'output.Fallo come fase di post-elaborazione quando stampi sulla pagina: i dati nel database dovrebbero essere esattamente gli stessi digitati dall'utente.

Ad esempio, se l'utente entra <b><script>evil here</script></b>, il tuo codice lo tradurrebbe in <b>&lt;script&gt;evil here&lt;/script&gt;</b> prima di eseguire il rendering della pagina.

E non usa le espressioni regolari per risolvere questo problema, è solo un invito per qualcuno intelligente a risolverlo di nuovo.

FCKEditor può essere configurato per utilizzare solo pochi tag.Dovrai codificare tutto tranne quei pochi tag.

Questi tag sono:<strong> <em> <u> <ol> <ul> <li> <p> <blockquote> <font> <span>.

Il tag del carattere dovrebbe avere solo attributi di faccia e dimensione.Il tag span dovrebbe avere solo un attributo class.

Nessun altro attributo dovrebbe essere consentito per questi tag.

Capisco le cose da non fare.Mi manca un DO.

L'uso di FCKEditor è un requisito o puoi usare un editor/linguaggio di markup diverso?Consiglio di utilizzare Markdown e WMD Editor, lo stesso linguaggio utilizzato da StackOverflow.La libreria Markdown per .NET dovrebbe avere un'opzione per eseguire l'escape di tutti i tag HTML: assicurati di attivarla.

XSS è una cosa complicata.Ti suggerisco qualche lettura:

Ad ogni modo, la mia sintesi è che, in sostanza, devi consentire l'ingresso solo di articoli strettamente accettati;non puoi rifiutare i vettori di exploit conosciuti perché altrimenti sarai sempre dietro l'eterna lotta.

Penso che il problema sollevato da alcuni non sia che Fckeditor codifichi solo pochi tag.Si tratta di un presupposto ingenuo secondo cui un utente malvagio utilizzerà Fckeditor per scrivere la sua malizia.Gli strumenti che consentono la modifica manuale dell'input sono innumerevoli.

Tratto tutti i dati utente come contaminati;e usa Markdown per convertire il testo in HTML.Disinfetta qualsiasi HTML trovato nel testo, riducendo la malizia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top