2009-12-11 3 views
13

Какой самый лучший способ обработки ошибок, таких какHandle «потенциально опасное значение Request.Form ...»

потенциально опасное значение Request.Form было обнаружено от клиента»

в ASP.NET?

Я хотел бы сохранить проверку, так как мои формы не имеют веских причин допускать символы HTML. Однако я не совсем уверен, как справиться с этой ошибкой более дружелюбно. Я попытался обработать его в Page_Error, но, насколько это возможно как я могу сказать, это происходит в секции нижнего уровня, поэтому функция Page_Error никогда не срабатывает.

Поэтому мне, возможно, прибегнуть к использованию Application_Error в моем Global.asax файле. Если это единственный способ справиться с этой ошибкой, есть ли способ специально обработать эту ошибку? Я не хочу обрабатывать все ошибки приложения одинаково.

Благодаря

+0

Can вы публикуете свой тег тега? – IrishChieftain

+0

<% @ Название страницы = "" Язык = "C#" MasterPageFile = "~/Main.Master" AutoEventWireup = "true" CodeBehind = "CUser.aspx.cs" Inherits = "TestSite.Test.MasterPage.CUser"%> – keyboardP

ответ

21

У вас есть два варианта :

// 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"); 
     } 
    } 
} 

Или

// 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

Спасибо, это похоже на то, что мне нужно. – keyboardP

+0

[ОпределяетPostBackmode] (http://msdn.microsoft.com/en-us/library/system.web.ui.page.determinepostbackmode%28v=vs.110%29.aspx), как указано [здесь] (http: //www.codeproject.com/Tips/277509/try-catch-block-around-A-potential-dangerous-Req) - альтернативное решение? [Я не играл с ним, поэтому не могу сказать, правильно ли это.] – LosManos

1

Вы можете использовать Server.GetLastError() в Application_Error, чтобы получить исключение, сброшенная, проверить исключение, и реагировать так, как вы хотели бы его (перенаправление на страницу, и т.д.)

3

Вы не хотите добавлять лишний багаж в Global.asax. Если вы удовлетворены, что это вызвано паразитным вводом данных, а затем иметь дело с входом, независимо от того, где он идет от:

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

концентрата на причине ошибки :-)

+0

Спасибо за ответ. Я использую regex для обработки любых проверок ввода, но в качестве отказоустойчивого, я хотел бы иметь эту проверку. Могут быть и другие исключения, с которыми я бы хотел справиться, это был только один из них, чтобы понять, каким будет лучший способ справиться с ними. – keyboardP

+0

Хорошо, но с регулярным выражением вы не можете заранее определить формат вредоносного ввода. Вам нужно перехватить весь входной конец, если необходимо, закодировать его :-) – IrishChieftain

+2

Ах, конечно: D! Все входные данные будут дезинфицированы, чтобы удалить любые специальные символы. Регулярное выражение из части класса полезности, которую я сделал, используя некоторые выражения из этого сайта: http://www.securityfocus.com/infocus/1768 – keyboardP