Quantcast Sử dụng custom error pages trong ASP.NET

Sử dụng custom error pages trong ASP.NET

by Neon Quach 7. February 2010 00:00

Giới thiệu:
Sau khi triển khai ứng dụng asp.net lên mạng, thế nào ứng dụng của chúng ta sẻ gặp 1 số lổi không mong đợi, chẳng hạn như thay đổi chuổi kết nối, sai mật khẩu trong chuổi kết nối ....

Một trong những số lổi đó, có thể chứa những thông tin nhạy cảm, mà có thể hacker cố gắng tìm ra lổi đó và tấn công website của chúng ta. Chính vì thể khi có lổi xãy ra, chúng ta không nên show hết các lổi đó, mà chúng ta should chuyển hướng user sang 1 trang khác, chứa thông điệp lổi đó.

Chẳng hạn khi chúng ta input giá trị không hợp lệ trên URL (Query String Injection)

Tất cả các lổi hiển thị hết cho end user


Nếu sử dụng custom error thì chúng ta sẻ redirect end user sang 1 trang lổi do mình định nghỉa.

Khi đó URL của ứng dụng chúng ta cũng được chuyển sang trang Custom Error Page.



Cách làm:
Chúng ta có thể dể dàng cấu hình Custom Error Page trong web.config qua thẻ customErrors.

Đầu tiên chúng ta tạo 1 ứng dụng asp.net, ở đây mình đặt tên là CustomError



Sau đó mình thêm 1 page gọi là ErrorPage.aspx, khi có lổi xãy ra, end user sẻ được chuyển sang trang này. Và trong trang ErrorPage.aspx mình put đoạn text để thông báo có lổi xãy ra.

Opps ! Đã có lổi xãy ra trong quá trình thực thi xin vui lòng thực hiện lại.

Mở file web.config tìm đến dòng customErrors và thêm mode và defaultRedirect như hình sau:


Chú ý: Mode: Off luôn luôn hiển thị thông điệp lổi đến end user. On: định nghỉa 1 trang custom error và chuyển end user sang trang error này. RemoteOnly: mặc định được thiết lập trong file machine.config, sẻ hiển thị lổi to end user nếu được truy cập từ local, và redirect to end user nếu truy cập từ bên ngòai.

Xử lý lổi bằng cách lập trình

Tạo file Global.asax và viết code trong hàm Application_Error, chúng ta get mã lổi và rediect user sang trang thích hợp

protected void Application_Error(object sender, EventArgs e)

{

    Exception ex = HttpContext.Current.Server.GetLastError();

    if (ex.InnerException != null)

    {

        ex = ex.InnerException;

        log.Error(ex);

    }

    if (ex is HttpException)

    {

        if (((HttpException)ex).GetHttpCode() == 404)

        {

            Response.Redirect("~/PageNotFound.aspx");

        }

        else

        {

            Response.Redirect("~/ErrorPage.aspx");

        }

    }

 

    HttpContext.Current.Server.ClearError();

}

History version:
√ 06/05/2009: Config custom error on web.config (dd/mm/yyyy)
√ 07/02/2010: Show error page by programmatically

Hope this help,
Neon Quach

Tags:


Categories: asp.net

blog comments powered by Disqus

About me

I'm  currently employed as Software developer at devinition.com and also a Microsoft Certified Technology Specialist (MCTS), Microsoft Certified Professional Developer (MCPD) in Net Framework 2.0 and 3.5: Web Applications and MCTS .NET Framework 3.5, ADO.NET Applications

Powered by BlogEngine.NET 2.5.0.5 - Eco Theme by n3o Web Designers