2011-10-12 9 views
14

Abbiamo appena aggiornato a ASP.NET 4.0 e abbiamo riscontrato che requestValidation non funziona più. La documentazione MSDN suggeriscono abbiamo bisogno di impostare requestValidationMode nel web.config a 2,0:Come disabilitare la convalida delle richieste senza impostare RequestValidationMode su 2.0?

  • 4,0 (il valore predefinito). L'oggetto HttpRequest imposta internamente un flag che indica che la convalida della richiesta deve essere attivata ogni volta che si accede a qualsiasi richiesta di dati HTTP a . Ciò garantisce che la convalida della richiesta venga attivata prima che i dati come cookie e URL siano aggiornati a durante la richiesta. Le impostazioni di convalida della richiesta dell'elemento pagine (se presente) nel file di configurazione o della direttiva @ Page in una singola pagina vengono ignorate.
  • 2.0. La convalida della richiesta è abilitata solo per le pagine, non per tutte le richieste HTTP. Inoltre, le impostazioni di convalida delle richieste delle voci elemento (se presenti) nel file di configurazione o della direttiva @ Page in una singola pagina vengono utilizzate per determinare quali richieste di pagina devono essere convalidate su .

Questo funzionerà per noi, tuttavia sono un po 'perplesso. Sembra che stiamo mettendo questa in una modalità legacy/compatibilità. Sicuramente dovrebbe essere possibile avere il comportamento 4.0, ma avere comunque un'opzione per disattivarlo su una pagina?

risposta

-3

È possibile impostare ValidateRequest su false nella direttiva di pagina:

<%@ Page ValidateRequest="false" %> 
+3

Lui lo sa ovviamente. Hai letto la domanda? – Stilgar

+1

@James Johnson Grazie per aver formattato correttamente la mia risposta (per apparire come codice invece del testo) –

+0

@Stilgar: ho capito quale fosse il vero problema dopo che mi hai interrogato, grazie :( –

2

Sembra che non è possibile attivare questa opzione o fuori per una pagina in requestValidationMode 4.0.

Questo whitepaper delinea i cambiamenti in .Net 4.0, di cui questo sembra essere uno. Anche il whitepaper suggerisce di ritornare alla requestValidationMode 2,0

Per ripristinare il comportamento della funzionalità di convalida richiesta di ASP.NET 2.0, aggiungere la seguente impostazione nel file web.config:

<httpRuntime requestValidationMode="2.0" />

anche se anche raccomanda utilmente

che si analizza eventuali errori di convalida della richiesta per determinare se existin g gestori, moduli o altri codici personalizzati accedono a input HTTP potenzialmente pericolosi che potrebbero essere vettori di attacco XSS.

senza dare alcuna guida sul modo migliore per risolvere questi problemi

4

la cosa migliore è di ignorare il requestValidationType con il proprio codice:

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

MSDN collegamento

+3

Sembra un eccesso eccessivo :( –

+1

Ho dovuto usare questa tecnica per la mia applicazione MVC. aveva un controller di terze parti che aveva bisogno di ricevere HTML come parametro e le altre risposte qui non funzionavano Grazie a ScottRFrost –

26

I trovato un modo per ottenere ciò senza cambiare RequestValidationMode a 2.0 a tutto il sito:

È possibile creare una sottodirectory per la pagina che si desidera disabilitare la convalida della richiesta e aggiungere un nuovo web.config a questa directory con RequestValidationMode impostato su 2.0, in questo modo solo questa directory funzionerà in modalità 2.0 senza influire su tutte le altre richieste che funzioneranno in modalità 4.0.

Penso che sia possibile aggiungere una sezione di posizione al web.config principale specificando solo una pagina, ma non l'ho ancora testata. Qualcosa di simile a questo:

<location path="Admin/Translation.aspx"> 
    <system.web> 
     <httpRuntime requestValidationMode="2.0"/> 
    </system.web> 
</location> 

Spero che ti aiuta come mi ha aiutato!

+5

Funziona perfettamente, grazie Alcune cose che ho imparato: La posizione viene aggiunta in come fratello a Il valore dell'attributo path non può iniziare con un prefisso /. Può aggiungere una singola pagina o un'intera cartella (non utilizzare trailing /) – mellodev

Problemi correlati