2009-06-22 13 views
5

In Podcast 58 (circa 20 minuti a), Jeff lamenta i problemi di HTML.Encode() e Joel parla di utilizzare il sistema di tipo ad avere le stringhe ordinarie e HTMLStrings:Prevenire XSS exploit utilizzando il sistema di tipo Joel suggerito

  • Un breve cenno politico sul male dei motori di visualizzazione che non riescono a codificare HTML per impostazione predefinita. Il problema con questa scelta di progettazione è che non è "sicuro per impostazione predefinita", che è sempre la scelta errata per un framework o API. Dimentica di codificare un po 'di dati immessi dall'utente in una singola area puzzolente nella tua app Web e sarai totalmente di proprietà di XSS. Credici. Lo so perché è lo successo a noi. Più volte!

  • Joel sostiene che, con un linguaggio fortemente tipizzato e il giusto quadro , è possibile (in teoria) di eliminare completamente XSS - questo richiederebbe utilizzando uno specifico i dati tipo, un tipo che è il tuo unico modo per inviare dati al browser. Quel tipo di dati sarebbe stato convalidato al momento della compilazione .

I commenti alla menzione post sul blog utilizzando l'analisi statica per trovare potenziali debolezze. Il transcript Wiki non è ancora finito.

È possibile implementare il suggerimento di Joel senza disporre di un nuovo framework ASP.NET?

Potrebbe essere possibile implementarlo semplicemente sottoclassando ogni controllo e applicando nuove interfacce basate su HTMLString? Se la maggior parte delle persone già sottoclasse i controlli per poter meglio iniettare funzionalità specifiche del sito, non sarebbe abbastanza facile da implementare?

Vale la pena farlo invece di investire nell'analisi statica?

risposta

2

Per utilizzare HtmlString ovunque, è necessario riscrivere in sostanza tutte le proprietà e il metodo di ogni controllo web. System.String è sigillato, quindi non puoi eseguirne la sottoclasse.

Un approccio più semplice (ma ancora molto dispendioso in termini di tempo) consisterebbe nell'utilizzare adattatori di controllo per sostituire i controlli Web con alternative sicure. In questo caso, sottoclassi ciascun controllo web e sostituirai i metodi Render al contenuto dinamico con codifica HTML.

+0

Credo sia il mio punto. In molte applicazioni ASP.NET che ho utilizzato OGNI controllo era già sottoclasse da quando abbiamo implementato I18n e estensioni speciali per la convalida e altre cose. –