2009-12-11 74 views
13

cách tốt nhất để xử lý các lỗi là gì nhưXử lý "giá trị Request.Form nguy hiểm ..."

Một giá trị Request.Form nguy hiểm đã được phát hiện từ khách hàng"

trong ASP.NET?

Tôi muốn tiếp tục xác thực vì biểu mẫu của tôi không có lý do hợp lệ để cho phép ký tự HTML. Tuy nhiên, tôi không chắc chắn cách xử lý lỗi này một cách thân thiện hơn. Tôi đã thử xử lý nó trong một Page_Error nhưng, đến nay như tôi có thể nói, điều này xảy ra ở phần cấp thấp hơn để chức năng Page_Error không bao giờ cháy.

Do đó, tôi có thể phải sử dụng Application_Error trong tệp Global.asax của mình. Nếu đây là cách duy nhất để xử lý lỗi đó, có cách nào xử lý cụ thể một lỗi đó không? Tôi không muốn xử lý tất cả các lỗi ứng dụng theo cách tương tự.

Cảm ơn

+0

Can bạn đăng nội dung thẻ trang của mình? – IrishChieftain

+0

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

Trả lời

21

Bạn có hai lựa chọn :

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

Hoặc

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

Cảm ơn, điều này có vẻ như những gì tôi cần. – keyboardP

+0

Có [DeterminePostBackmode] (http://msdn.microsoft.com/en-us/library/system.web.ui.page.determinepostbackmode%28v=vs.110%29.aspx) như đã đề cập [ở đây] (http: //www.codeproject.com/Tips/277509/try-catch-block-around-A-potentially-dangerous-Req) là giải pháp thay thế? [Tôi đã không chơi với nó vì vậy tôi không thể nói nếu nó là thích hợp.] – LosManos

1

Bạn có thể sử dụng Server.GetLastError() trong Application_Error để có được những ngoại lệ được ném ra, kiểm tra việc ngoại lệ, và đáp ứng như bạn muốn nó (chuyển hướng đến một trang, vv)

3

Bạn không muốn thêm hành lý không cần thiết vào Global.asax. Nếu bạn đã hài lòng rằng đây là do đầu vào dữ liệu giả mạo, sau đó đối phó với các đầu vào, không cần biết nó đến từ:

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

Tập trung vào các nguyên nhân của lỗi :-)

+0

Cảm ơn bạn đã trả lời. Tôi đang sử dụng regex để xử lý bất kỳ kiểm tra đầu vào, nhưng như là một không an toàn, tôi muốn có xác nhận này. Có thể có những trường hợp ngoại lệ khác mà tôi muốn xử lý, đây chỉ là một trong số họ để xem cách tốt nhất để xử lý chúng là gì. – keyboardP

+0

Ok, nhưng với regex bạn không thể xác định trước định dạng của đầu vào độc hại. Bạn cần phải chặn tất cả đầu vào mã hóa nó nếu cần thiết :-) – IrishChieftain

+2

Ah, tất nhiên: D! Tất cả các đầu vào sẽ được khử trùng để loại bỏ bất kỳ ký tự đặc biệt nào cả. Regex là một phần của một lớp tiện ích mà tôi đã tạo, sử dụng một số biểu thức từ trang web này: http://www.securityfocus.com/infocus/1768 – keyboardP

Các vấn đề liên quan