Domanda

Se ho un utente l'immissione di dati in un editor di testo ricco (piccolo editore) e la presentazione dei dati che sto Memorizzazione in un database e quindi il recupero di mostrare su altre pagine web dinamiche, perché ho bisogno di codifica qui.

E 'l'unica ragione perché qualcuno potrebbe incollare javascript nell'editor di testo ricco? c'è qualche altra ragione?

È stato utile?

Soluzione

La sicurezza è la ragione.

La ragione più ovvia / comune è Cross-Site-Scripting (XSS). Si scopre di essere la causa principale dei problemi di sicurezza si potrebbe assistere nel tuo sito.

  

Cross-site scripting (XSS) è un tipo   di vulnerabilità di sicurezza informatica   di solito si trovano nelle applicazioni web   che consente attacchi dannosi per   iniettare script lato client in web   le pagine visualizzate da altri utenti. Un   sfruttati cross-site scripting   vulnerabilità può essere utilizzato da malintenzionati   all'accesso bypass comandi quali il   stessa politica di origine. Cross-site   scripting effettuate su siti web sono stati   circa l'80% di tutta la sicurezza   vulnerabilità documentate da Symantec   a partire dal 2007. 1 Il loro impatto può variare   da un fastidio piccola ad una significativa   rischio per la sicurezza, a seconda della   la sensibilità dei dati trattati dal   sito vulnerabile, e la natura di qualsiasi   attenuazioni di sicurezza implementata da   il proprietario del sito.

aggiuntivo, come mostrato in seguito i commenti, il layout del sito può anche essere avvitato.

È necessario Microsoft Anti-Cross Site Scripting libreria

Ulteriori risorse

http://forums.asp.net/t/1223756.aspx

Altri suggerimenti

Si sta facendo alcuni errori.

Se stai accettando testo in formato HTML dall'editor rich-text, è non possono di chiamata Html.Encode, o sarà codificare tutti i tag HTML, e vedrete markup cruda, invece di testo formattato.

Tuttavia, è ancora necessario per la protezione contro XSS.

In altre parole, se l'utente inserisce il seguente codice HTML:

<b>Hello!</b>
<script>alert('XSS!');</script>

Si desidera mantenere il tag <b>, ma goccia (non codifica) il tag <script>.
Allo stesso modo, è necessario eliminare gli attributi di eventi in linea (come onmouseover) e Javascript URL (come <a href="javascript:alert('XSS!');>Dancing Bunnies!</a>)

Si dovrebbe correre HTML dell'utente attraverso un rigoroso parser XML e mantenere un rigoroso bianco-lista di tag e attributi quando si salva il contenuto.

credo che tu stia confondendo "codifica" con "scrubbing".

Se si desidera accettare testo da un utente, è necessario encode come HTML prima di renderlo come HTML. In questo modo, il testo

a < b

è HTML-codificato come

a &lt; b

e reso in un browser HTML (proprio come l'utente entrato) come:

a < b

Se si desidera accettare HTML da un utente (che suona come si fa in questo caso), è già in formato HTML, in modo che non si vuole chiamare di nuovo HTML.Encode. Tuttavia, si consiglia di strofinare per rimuovere certi markup che non si consente (come blocchi di script).

La sicurezza è il motivo principale.

Non solo potrebbe un utente immettere il codice JavaScript o qualche altra cattiveria, è necessario utilizzare HTML codificare al fine di visualizzare alcuni caratteri nella pagina. Lei non vorrebbe la tua pagina di rompere perché il database conteneva: "Nice Pagina: ->".

Inoltre, se si stanno inserendo il codice in un database, assicurarsi di "sanatize" gli ingressi al database.

Si, è quello di impedire l'esecuzione di JavaScript da se qualcuno dovesse stringa di input in dannoso l'editor di testo RTF. Tuttavia, testo semplice Javascript non la vostra unica preoccupazione, per esempio, questo è un XSS:

<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>

Date un'occhiata qui per una serie di diverse opzioni di XSS; http://ha.ckers.org/xss.html

Come nuova funzionalità a parte ..... MVC2 ha messo in atto in modo non hanno più bisogno di chiamare HTML.Encode

se si cambia la sintassi vista da

  

a

  

MVC codificherà automaticamente per voi. Rende cosa molto più facile / più veloce. Anche in questo caso, solo MVC2

Un altro motivo è che qualche utente può inserire un paio di tag di chiusura </div></table> e potenzialmente rompere il layout del sito web. Se si utilizza un HTML strumento di editing Assicurarsi che l'HTML prodotto è valido per integrarli nella pagina senza codifica. Alcune analisi lato server è necessaria per fare questo. È possibile utilizzare HtmlAgilityPack per fare questo.

Il motivo principale per fare ciò che il vostro suggerire è quello di fuggire l'output. Dal momento che si accettano HTML e vuole l'uscita non è possibile farlo. Quello che dovete fare è filtrare fuori cosa che di utente può fare che sono insicuri, o almeno non quello che volete.

Per questo, mi permetta di suggerire AntiSamy .

È possibile demo è qui .

Quello che stai facendo ha un sacco di rischi ereditare e si dovrebbe considerare con molta attenzione.

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