2011-01-18 48 views
9

Hiện tại chúng tôi có một trang được sử dụng để hiển thị thông báo lỗi chung khi xảy ra lỗi trên trang web của chúng tôi. Nó không có chức năng nào khác ngoài việc hiển thị nhãn đề cập đến lỗi. Đây là vấn đề của tôi, khách hàng của chúng tôi đã chạy đánh giá bảo mật và cho chúng tôi biết trang lỗi của chúng tôi chứa lừa đảo do URL trong chuỗi truy vấn, bây giờ tôi không coi đây là vấn đề, nhưng để chấm dứt câu hỏi, tôi muốn loại bỏ chuỗi truy vấn.AspxErrorPath trong trang lỗi tùy chỉnh

nhập web.config của tôi là thế này:?

<customErrors mode="On" defaultRedirect="~/DefaultErrorPage.aspx"> 
</customErrors> 

Khi một lỗi xảy ra, nó đi vào DefaultErrorPage.aspx aspxerrorpath =/WEBSITE1/LastPage.aspx

Làm thế nào tôi có thể ngăn chặn điều này ? Tuy nhiên, tôi chỉ có thể chuyển hướng đến trang nếu nó chứa truy vấn, nhưng tôi đang tìm cách ngăn chặn chuỗi truy vấn thay vì chuyển hướng thêm.

Trả lời

7

bạn có thể bắt/xử lý tất cả các lỗi trong tập tin global.asax của bạn thay vào đó và làm chuyển hướng có

protected void Application_Error(object sender, EventArgs e) 
    { 
     //Exception ex = Server.GetLastError(); 

     Server.Transfer("~/DefaultErrorPage.aspx"); 
    } 
+0

Điều này sẽ hoạt động ... cho đến khi Microsoft thêm =) – jaekie

+0

Thật không may điều này không hoạt động nếu lỗi trong Application_Start. "Yêu cầu không có sẵn trong ngữ cảnh này" –

+0

@ noah1989 Bởi "không hoạt động", bạn có nghĩa là nó vẫn cho phép các kiểm toán viên an ninh nghĩ rằng có một số loại lỗ hổng tập lệnh cross site? Hay bạn chỉ cần sử dụng một cơ chế khác để chẩn đoán lỗi trong trường hợp đó? –

2

Bạn sẽ phải kiểm soát được các lỗi quá trình xử lý chính mình. Một phương pháp là loại bỏ chuyển hướng lỗi tùy chỉnh và sử dụng phương thức Application_Error trong toàn cục. Sau đó, bạn có thể hướng người đó, nếu cần mà không có bất kỳ đối số chuỗi truy vấn nào.

Một tùy chọn khác là ELMAH, được thiết kế để tránh màn hình màu vàng của lỗi chết trong ASP.NET. Sau đó, bạn có thể điều chỉnh một lỗi thân thiện và không phải lo lắng về việc viết mã xử lý lỗi, mỗi lần truy cập.

Phương pháp thứ ba là hướng dẫn nhóm bảo mật về cách ASP.NET hoạt động và xem liệu "mối quan tâm bảo mật" có hợp pháp (có thể là) hay không. Điều này không có nghĩa là họ sẽ không làm cho bạn làm một trong những lựa chọn trên anyway, tất nhiên.

+0

Tôi rất muốn sử dụng ELMAH, tôi sử dụng nó trên các dự án nhà của tôi, nhưng khách hàng của tôi hạn chế 99% bên thứ ba của chúng tôi và 100% bên thứ ba nguồn mở – jaekie

3

Để khắc phục nhanh, tôi thấy rằng việc thêm "?" vào cuối của thiết lập defaultRedirect làm việc cho tôi trong việc loại bỏ aspxerrorpath.

Ngoài ra, tôi đã nhận được cùng một vấn đề với các thiết lập customErrors trong system.web, và cùng một giải pháp làm việc:

<customErrors mode="On" defaultRedirect="~/SystemError.aspx"> 
    <error statusCode="403" redirect="~/Home.aspx?"/> 
    <error statusCode="404" redirect="~/Home.aspx?"/> 
</customErrors> 

Ngoài ra, làm tương tự trên các thiết lập system.webServer:

<httpErrors errorMode="Custom"> 
    <remove statusCode="403" subStatusCode="-1" /> 
    <error statusCode="403" path="/Home.aspx?" responseMode="Redirect" /> 
    <remove statusCode="404" subStatusCode="-1" /> 
    <error statusCode="404" path="/Home.aspx?" responseMode="Redirect" /> 
</httpErrors> 
Các vấn đề liên quan