MVC - CustomErrors не работает при установке redirectMode = «ResponseRewrite» - PullRequest
2 голосов
/ 23 сентября 2010

У меня есть веб-приложение ASP.NET 4.0 MVC, работающее на IIS 6.0 с пользовательским разделом ошибки webconfig:

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="/Home/Error">
  <error statusCode="403" redirect="/Home/Error"/>
  <error statusCode="404" redirect="/Home/Error"/>
</customErrors>

и страницей error.aspx, которая выглядит следующим образом:

<%@ 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, перенаправление на мою страницу пользовательских ошибок больше не работает, и я получаю ошибку страницы "Ошибка сервера в приложении" / "- ресурс не можетбыть найденным".Фактически действие контроллера также игнорируется.Когда я принимаю эту настройку, все работает как надо.Я пытаюсь использовать обходной путь Скотта Гу для перечисленной здесь уязвимости Asp.net: http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx

Любая помощь будет принята с благодарностью.Спасибо, Билли

Ответы [ 3 ]

2 голосов
/ 27 сентября 2010

Проблема, с которой я столкнулся при попытке реализовать это в нашем приложении MVC, заключалась в том, что мы использовали URL-адрес MVC, который требует маршрутизации для работы в качестве defaultRedirect.К сожалению, поскольку server.transfer выполняется с перенаправлением ResponseRewrite, это не работает.Вместо этого я должен был указать URL-адрес ошибки непосредственно в файл aspx.Также у вас больше нет доступа к сеансу, что является еще одной распространенной проблемой, с которой сталкиваются люди при использовании redseMode ResponseRewrite.

1 голос
/ 23 сентября 2010

К сожалению, у вас не может быть никаких тегов <error> в блоке <customErrors> по Скотту Гатри. Они определенно работают над патчем, но в то же время вы должны использовать очень простой раздел <customErrors>, подобный следующему:

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/error.aspx" />
0 голосов
/ 24 сентября 2010

Я ищу тот же ответ.Ответ г-на Андерсона, однако, не точен.Скотт рекомендует однородность кодов ответов.Их тестовый скрипт .vbs ищет несколько условий.Коды ошибок 404 и 500 - все, что он ищет для перенаправления.Если они одинаковы, сценарий счастлив.Если один равен нулю, другой должен соответствовать перенаправлению по умолчанию.Опять же, это тесты на однородность.Пока ваши 404 и 500 ответов не различимы, его сценарий будет зеленым цветом вашего кода.

Значение ResponseRewrite, по-видимому, должно игнорировать 302 ответа IIS.Я понял, что 302 может вернуться до любой обработанной ошибки 404 или 500, и сообщаю информацию о времени атакующему.Я не уверен, что вы можете обойтись без ResponseRewrite (и Microsoft определенно говорит, что вы не можете.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...