2009-12-11 22 views
13

Qual è il modo migliore per gestire gli errori, comeManiglia "valore potenzialmente pericoloso Request.Form ..."

Un valore potenzialmente pericoloso Request.Form è stato rilevato dal client"

in ASP.NET?

mi piacerebbe mantenere la convalida, come le mie forme non hanno validi motivi per essere consentendo caratteri HTML. Tuttavia, io non sono molto sicuro di come gestire questo errore in maniera più amichevole. Ho provato a gestirlo in un Page_Error ma, per il momento come posso dire, ciò si verifica in una sezione di livello inferiore, pertanto la funzione Page_Error non viene mai attivata.

Pertanto, potrebbe essere necessario ricorrere all'utilizzo di Application_Error nel file Global.asax. Se questo è l'unico modo per gestire tale errore, esiste un modo per gestire specificamente quell'errore? Non voglio gestire tutti gli errori dell'applicazione nello stesso modo.

Grazie

+0

Can pubblichi il contenuto del tag della pagina? – IrishChieftain

+0

<% @ Page Title = "" Language = "C#" MasterPageFile = "~/Main.Master" AutoEventWireup = "true" CodeBehind = "CUser.aspx.cs" Inherits = "TestSite.Test.MasterPage.CUser"%> – keyboardP

risposta

21

Hai due opzioni :

// Editing your global.asax.cs 
public class Global : System.Web.HttpApplication 
{ 
    protected void Application_Error(object sender, EventArgs e) 
    { 
     Exception lastError = Server.GetLastError(); 
     if (lastError is HttpRequestValidationException) 
     { 
      Response.Redirect("~/RequestValidationError.aspx"); 
     } 
    } 
} 

O

// Editing your CUser.aspx.cs 
public partial class CUser : System.Web.UI.Page 
{ 
    protected override void OnError(EventArgs e) 
    { 
     Response.Redirect("~/RequestValidationError.aspx"); 
     Context.ClearError(); 
    } 
} 
+0

Grazie, questo mi sembra quello di cui ho bisogno. – keyboardP

+0

Would [DeterminePostBackmode] (http://msdn.microsoft.com/en-us/library/system.web.ui.page.determinepostbackmode%28v=vs.110%29.aspx) come accennato [qui] (http: //www.codeproject.com/Tips/277509/try-catch-block-around-A-potentially-dangerous-Req) è una soluzione alternativa? [Non ci ho giocato, quindi non posso dire se è corretto.] – LosManos

1

È possibile utilizzare Server.GetLastError() in Application_Error per ottenere l'eccezione che è stato gettato, ispezionare l'eccezione, e rispondere come ti piace ad esso (redirect ad una pagina, ecc)

3

Non vuoi aggiungere il bagaglio non necessario a Global.asax. Se si è soddisfatti che questo è causato da input di dati spuria, poi trattare con l'ingresso, non importa dove è venuta da:

http://codersbarn.com/post/2008/11/01/ASPNET-Data-Input-Validation.aspx

Concentrato sulla causa dell'errore :-)

+0

Grazie per la risposta. Sto usando regex per gestire qualsiasi controllo di input, ma come un fail-safe, mi piacerebbe avere questa convalida. Potrebbero esserci altre eccezioni che mi piacerebbe gestire, questo era solo uno di loro per vedere quale sarebbe stato il modo migliore per gestirli. – keyboardP

+0

Ok, ma con regex non è possibile pre-determinare il formato dell'input dannoso. Devi intercettare tutti gli input end codificali se necessario :-) – IrishChieftain

+2

Ah, ovviamente: D! Tutto l'input verrà disinfettato per rimuovere tutti i caratteri speciali. L'espressione regolare proviene da parte di una classe di utilità che ho creato, utilizzando alcune delle espressioni di questo sito: http://www.securityfocus.com/infocus/1768 – keyboardP

Problemi correlati