2010-02-25 13 views
5

Qualcuno può far luce sul motivo per cui DotNetNuke viene configurato con la convalida delle richieste e la convalida degli eventi disabilitata? Sono entrambi fuori dal livello web.config per un'installazione predefinita che sembra essere un approccio regressivo. Ci sono motivi validi per questo e qual è l'impatto funzionale su DotNetNuke se vengono riattivati?Perché DotNetNuke ha disabilitato la convalida?

Ovviamente è necessario che nel codice venga eseguita la convalida dell'input appropriato, ma il comportamento del framework .NET nativo è sempre un bel fallback.

Aggiornamento: ulteriori pensieri su questo in Request Validation, DotNetNuke and design utopia

risposta

4

Si scopre che gli utenti di DotNetNuke hanno disattivato questa funzione per facilitare l'invio di contenuto HTML tramite controlli di testo avanzato. La disattivazione di entrambe le richieste e la convalida degli eventi sono di progettazione.

Avrei preferito vedere questo fatto a livello di pagina dove richiesto. La validazione globale non assolve in alcun modo lo sviluppatore dalla convalida dell'input in ogni punto in cui è stato acquisito, ma continuo a mantenere questa caratteristica come una buona assicurazione e disabilitarla crea un rischio. Sarei molto interessato a vedere quanti siti DNN là fuori hanno vulnerabilità XSS come risultato di nessuna convalida globale combinata con una scarsa pratica di sviluppo.

4

convalida globale di tutti gli input è una cattiva pratica. Come la maggior parte delle applicazioni, DotNetNuke funziona in base alla funzione per funzione per la convalida dell'input.

La creazione di un codice vulnerabile dipende in larga misura da come viene utilizzato l'input dell'utente. Ad esempio, SQL Injection e XSS si basano entrambi su caratteri di controllo molto diversi. L'iniezione SQL può essere causata non filtrando uno dei tre caratteri '"\, dove la maggior parte degli XSS è causata dal non filtro <>. SQL Injection può essere causato anche da non utilizzando caratteri di controllo, per esempio, questo codice è vulnerabile a SQL Injection, perché non deve avere virgolette intorno ID:

SqlCommand("SELECT username FROM users where id="+id) 

convalida dell'input globali come magic_quotes_gpc sotto PHP Sarà inoltre fallire per prevenire questo tipo di attacco, e questo è uno dei motivi per cui è stato rimosso in PHP6.

+2

Sta dicendo convalida globale in sé è un male o solo se viene utilizzato al posto di ingresso esplicitamente validare su un caso per caso? Non riesco a vedere come usarlo come una rete di sicurezza aggiuntiva è sempre una brutta cosa. Certamente Microsoft ha pensato che valesse la pena includerlo. –

+0

@Troy Hunt Sì, la convalida dell'input globale è errata. Rende i programmatori pigri e non sarà mai in grado di prevenire tutte le vulnerabilità. Anche se ammetto che magic_quotes_gpc preverrà la maggior parte dell'iniezione sql. Il problema è che * la maggior parte * non è abbastanza buona, richiede solo 1 vulnerabilità per ottenere Pnw3d. I programmatori devono essere responsabili delle vulnerabilità che creano e devono sapere come correggerli. – rook

Problemi correlati