Perché ho bisogno di fare html.encode ()
-
04-10-2019 - |
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?
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
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 < 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=javascript:alert('XSS')>
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.