Quindi ho la convalida della richiesta nella mia applicazione web. Puoi aggiungere /foo?=<script>
e la mia applicazione web non la prenderà, non la filtrerà,
Questo mi rende vulnerabile agli attacchi; dovrei accenderlo?
Dipende se si codificano correttamente i caratteri sull'output. Ad esempio, per HTML il carattere <
deve essere codificato come <
.
Se lo fai ovunque, puoi disattivare in modo sicuro la convalida della richiesta.
Questo è un metodo migliore in quanto alcune sequenze di caratteri possono bypassare RV a seconda del contesto in cui l'input viene successivamente utilizzato. Ad esempio, se il valore lo rende in un valore di attributo HTML, una sequenza come
" onerror="alert('xss')
lo ignorerà quando viene inserito in
<img src="/foo.jpg" alt="<user input>" />
man mano che diventa
<img src="/foo.jpg" alt="" onerror="alert('xss')" />
Inoltre, l'input da fonti diverse da ASP.NET può significare che gli script possono ancora essere inseriti nell'applicazione. Questo è il motivo per cui raccomando la corretta codifica dell'output piuttosto che tentare di convalidare l'input. La convalida globale dell'input è un problema ancora più grande in quanto vi saranno sempre lacune quando non ci sono opzioni per convalidare il contesto.
La convalida delle richieste, sebbene utile in alcuni scenari, non è considerata da Microsoft come un limite di sicurezza, quindi non dovrebbe certamente essere l'unica difesa contro gli attacchi. Detto questo, è uno strumento valido da usare per la difesa in profondità, quindi dovresti abilitarlo a meno che tu non abbia una ragione specifica per non farlo.
In ultima analisi, è necessario conoscere il modello di minaccia per la propria applicazione, in modo da poter mettere a punto mitigazioni ponderate anziché attivare o disattivare semplici opzioni a livello di applicazione e sperare per il meglio.
Leggi altre domande sui tag asp.net