2011-01-18 13 views
9

Attualmente abbiamo una pagina che viene utilizzata per visualizzare un messaggio di errore generico quando si verificano errori sul nostro sito web. Non ha alcuna funzionalità se non quella di visualizzare un'etichetta che indica che c'è stato un errore.AspxErrorPath in Custom Error Page

Ecco il mio problema, il nostro cliente ha eseguito una revisione della sicurezza e ci dice che la nostra pagina di errore contiene phishing a causa dell'URL nella stringa di query, ora non considero questo un problema, ma per porre fine alla domanda, mi piacerebbe rimuovere la stringa di query.

Il mio ingresso web.config è questo:?

<customErrors mode="On" defaultRedirect="~/DefaultErrorPage.aspx"> 
</customErrors> 

Quando si verifica un errore, va a DefaultErrorPage.aspx aspxerrorpath =/Website1/LastPage.aspx

Come posso evitare questo ? Tuttavia, potrei semplicemente reindirizzare alla pagina se contiene la query, ma sono più alla ricerca di un modo per prevenire la stringa di query invece di un ulteriore reindirizzamento.

risposta

7

si poteva prendere/gestire tutti gli errori nel file Global.asax, invece, e fare il redirect non

protected void Application_Error(object sender, EventArgs e) 
    { 
     //Exception ex = Server.GetLastError(); 

     Server.Transfer("~/DefaultErrorPage.aspx"); 
    } 
+0

Funzionerà ... finché Microsoft non aggiunge =) – jaekie

+0

Sfortunatamente questo non funziona se l'errore è in Application_Start. "La richiesta non è disponibile in questo contesto" –

+0

@ noah1989 Con "non funziona" intendi che consente ancora ai revisori della sicurezza di pensare che esista una sorta di vulnerabilità di cross-site scripting? O hai solo bisogno di utilizzare un meccanismo diverso per diagnosticare gli errori in quel caso? –

2

Si sta andando ad avere per prendere il controllo del processo di gestione degli errori da soli. Un metodo è di eliminare il reindirizzamento personalizzato degli errori e utilizzare il metodo Application_Error in global. È quindi possibile indirizzare la persona, se necessario, senza alcun argomento di stringa di query.

Un'altra opzione è ELMAH, progettata per evitare la schermata gialla degli errori di morte in ASP.NET. È quindi possibile personalizzare un errore amichevole e non preoccuparsi di scrivere codice di gestione degli errori di per sé.

Un terzo metodo è quello di educare il team di sicurezza su come funziona ASP.NET e vedere se il "problema di sicurezza" è legittimo (potrebbe essere) o meno. Questo non significa che non ti faranno comunque fare una delle opzioni di cui sopra, ovviamente.

+0

Mi piacerebbe usare ELMAH, lo uso nei miei progetti a casa, ma i miei clienti limitano il 99% della nostra terza parte e il 100% delle terze parti open source – jaekie

3

Come soluzione rapida, ho trovato che l'aggiunta "?" alla fine dell'impostazione DefaultRedirect ha funzionato per me nel rimuovere l'aspxerrorpath.

Inoltre, mi è stato sempre lo stesso problema con le impostazioni CustomErrors in system.web, e la stessa soluzione lavorato:

<customErrors mode="On" defaultRedirect="~/SystemError.aspx"> 
    <error statusCode="403" redirect="~/Home.aspx?"/> 
    <error statusCode="404" redirect="~/Home.aspx?"/> 
</customErrors> 

In alternativa, fare lo stesso su impostazioni system.webServer:

<httpErrors errorMode="Custom"> 
    <remove statusCode="403" subStatusCode="-1" /> 
    <error statusCode="403" path="/Home.aspx?" responseMode="Redirect" /> 
    <remove statusCode="404" subStatusCode="-1" /> 
    <error statusCode="404" path="/Home.aspx?" responseMode="Redirect" /> 
</httpErrors>