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

Comments

7/2/2010 6:24:38 AM #

kien

em không hiểu lắm về vấn đề này mong anh giải thích thêm dc không ạ.em vào trang vinhuni.edu.vn cũng bị lổi Runtime Error.bây giờ thì sử lý nó sao đây anh.? help me
cụ thể như sau:
Runtime Error
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.

Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".


<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>


Notes: The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.


<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
    </system.web>
</configuration>


thế là thế nào hả anh .em có cách nào truy cập dc vào đó không ạ !! NẾU anh hướng dẩn thì tốt quá,néu k vào dang kí dc chắc em bị đuổi học mất.hu hu

kien Vietnam

7/2/2010 6:28:18 AM #

kien

tiện thể anh cho em YM của anh dc không ạ,nha anh.!!!
YM của em :megatrong123@yahoo.com

kien Vietnam

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