2010-01-15 1 views
18

Я использую Elmah для входа в проект ASP.NET MVC, и я получаю много ошибок 404 для пути /prx2.php, который, в свою очередь, передает хеш в качестве параметра querystring.Elmah сообщает о нежелательных ошибках 404

Я предполагаю, что это сканер, пытающийся найти уязвимости. Поскольку я не запускаю PHP, я в безопасности! Однако я хотел бы остановить ELmah, сообщив об этой ошибке.

Каков наилучший способ исключить эти типы ошибок из отчетов без фактического создания страницы /prx2.php. Я также хотел бы сделать это в файле конфигурации, а не делать это прогативно.

Любые идеи?

ответ

18

Elmah поддерживает фильтрацию ошибок - Error Filtering link

Это должно решить проблему для вас. Вы можете либо определить свой фильтр с помощью кода - в файле Global.asx, или в XML-конфигурации для самого Elmah

+0

Trouble - это все или ничего, если я хочу сделать это в файле конфигурации, например '' filters ALL 404 – Rippo

+0

Вы можете быть более конкретным в конфигурационных файлах - см. раздел «Использование JScript» этой ссылки. Это покажет вам, как быть более конкретным и определить сложные условия, используя синтаксис javascript, например, используя RegEx по URL-адресу для соответствия определенным путям. – saret

+1

+1 Спасибо, что посмотрим, хотя это выглядит немного неприятно! – Rippo

3

Шаг 1: Настройка разделов конфигурации для включения ELMAH errorFilter раздела:

<configSections> 
    <sectionGroup name="elmah"> 
    <!-- ... --> 
    <!-- this is the important part --> 
    <section name="errorFilter" requirePermission="false" 
     type="Elmah.ErrorFilterSectionHandler, Elmah"/> 
    </sectionGroup> 
</configSections> 

Шаг 2: Настройка фильтровать себя в разделе <elmah>.

<elmah> 
    <!-- ... --> 
    <errorFilter> 
    <test> 
     <and> 
     <equal binding="HttpStatusCode" value="404" type="Int32" /> 
     <!-- you may want to consider something more generic like pattern="/.+[.]php" --> 
     <regex binding="Context.Request.Url" pattern="/prx2.php" /> 
     </and> 
    </test> 
    </errorFilter> 
</elmah>  

Шаг 3: Включите Elmah.ErrorFilterModule внутри ваших программных модулей

Современный (IIS7 +) версия в том числе модуль HTTP:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
    <!-- ... --> 
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" 
     preCondition="managedHandler" /> 
    </modules> 
</system.webServer> 

Наследие (старше IIS) версии включая модуль HTTP:

<system.web> 
    <httpModules> 
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" /> 
    </httpModules> 
</system.web> 
+0

Не использовали это через некоторое время, но не отфильтровывает ли это 'ВСЕ' 404? Я хочу только определенные типы файлов, см. Мой комментарий выше на принятом ответе. Этот ответ не помогает tbh, извините – Rippo

+0

@Rippo - мой плохой - его просто, что эта страница сначала появляется, как удалить 404 из журнала elmah, а ссылка в принятом ответе мертва. Поэтому я обобщил здесь то, что я узнал из google :) Во всяком случае, я обновляю свой ответ, чтобы совместить также «фильтр только определенного пути». –