2010-09-23 121 views
2

我已經在IIS 6.0上運行同一個webconfig自定義錯誤部分的ASP.NET MVC 4.0 Web應用程序時不工作看起來像這樣的頁面:MVC的customErrors設置redirectMode =「ResponseRewrite」

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %> 

<%@ Import Namespace="System.Security.Cryptography" %> 
<%@ Import Namespace="System.Threading" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Error 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Error Processing your request.</h2> 

</asp:Content> 

<asp:Content ID="Content3" ContentPlaceHolderID="Scripts" runat="server"> 
    <script runat="server"> 
     void Page_Load() { 
      byte[] delay = new byte[1]; 
      RandomNumberGenerator prng = new RNGCryptoServiceProvider(); 

      prng.GetBytes(delay); 
      Thread.Sleep((int)delay[0]); 

      IDisposable disposable = prng as IDisposable; 
      if (disposable != null) { disposable.Dispose(); } 
     } 
    </script> 
</asp:Content> 

每當我包括上述「redirectMode =」 ResponseRewrite「」在webconfig自定義錯誤部分重定向到我的自定義錯誤頁不再工作,我得到的頁面錯誤「服務器「/」應用程序中的錯誤 - 找不到資源「。實際上,控制器操作也被忽略。當我採取這種設置時,我們的一切都按照應有的方式工作我正在嘗試將Scott Gu的解決方法整合到此處列出的Asp.net安全漏洞中:http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx

任何幫助將不勝感激。 謝謝, 比利

回答

1

不幸的是,根據斯科特格思裏在<customErrors>塊內不能有任何<error>標籤。他們肯定是工作的一個補丁,但在此期間,你必須使用一個非常簡單的<customErrors>部分類似如下:

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/error.aspx" /> 
+0

謝謝斯科特。這讓我朝着正確的方向前進。我上面顯示的其他一些問題是它不喜歡Inherits =「System.Web.Mvc.ViewPage 」。將其更改爲Inherits =「System.Web.Mvc.ViewPage。另外,我所引用的母版頁有一些問題被稱爲這樣,因爲一些對象沒有被正確填充,所以我使用了舊母版頁的縮小版本對於錯誤頁面。無論如何,再次感謝! – 2010-09-23 15:46:37

+2

對於downvoter:這個答案在當時是正確的。ASP.NET中有一個錯誤需要一個空的塊。請在這個響應之前考慮這個問題。 。在這裏查看bug詳細信息:http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx – 2011-05-03 01:14:29

0

我在尋找相同的答案。但安德森先生的迴應並不準確。 Scott正在推薦響應代碼的同質性。他們的.vbs測試腳本查找幾個條件。 404和500錯誤代碼都是他尋找重定向。如果他們一樣,劇本很開心。如果一個爲空,另一個必須匹配默認的重定向。再一次,那是測試同質性。只要您的404和500響應無法區分,他的腳本就會使您的代碼變綠。

ResponseRewrite的值似乎是繞過302響應IIS返回。我收集到302可以在任何處理404或500錯誤之前返回,並給攻擊者提供時間信息。我不確定你沒有ResponseRewrite可以做什麼(而且微軟肯定說你不能)

2

我試圖在我們的MVC應用上實現這個時遇到的問題是我們使用的MVC URL需要路由工作defaultRedirect。不幸的是,由於正在使用ResponseRewrite redirectMode執行server.transfer,所以這不起作用。相反,我必須將錯誤url點直接指向aspx文件。此外,您無法再訪問會話,這是人們在使用ResponseRewrite redirectMode時遇到的另一個常見問題。

相關問題