2010-01-15 10 views
18

Używam Elmah do logowania w projekcie ASP.NET MVC i otrzymuję wiele błędów 404 dla ścieżki /prx2.php, która z kolei przekazuje skrót jako parametr zapytania.Elmah zgłaszania niechcianych błędów 404

Zakładam, że to skaner próbuje wykryć luki. Ponieważ nie używam PHP, jestem bezpieczny! Chciałbym jednak zatrzymać ELMAh zgłaszanie tego błędu.

Co jest najlepszym sposobem na wykluczenie tego rodzaju błędów z raportowania bez tworzenia strony /prx2.php. Też chciałbym to zrobić w pliku konfiguracyjnym zamiast robić to prognostycznie.

Wszelkie pomysły?

Odpowiedz

18

ELMAH obsługuje filtrowanie błędu - Error Filtering link

To powinno rozwiązać problem dla Ciebie. Można też zdefiniować filtr za pomocą kodu - w pliku Global.asx lub w konfiguracji xml dla samego ELMAH

+0

Kłopot w tym, że to wszystko albo nic, jeśli chcę to zrobić w pliku konfiguracyjnym, np. '' filters ALL 404 – Rippo

+0

Możesz być bardziej szczegółowy w plikach konfiguracyjnych - zobacz sekcję Używanie JScript tego linku. To pokaże Ci, jak być bardziej szczegółowym i zdefiniować złożone warunki używając składni javascript, takie jak użycie RegEx na adresie URL, aby dopasować określone ścieżki. – saret

+1

+1 Dzięki temu będzie wyglądać, chociaż wygląda to trochę paskudnie! – Rippo

3

Krok 1: Skonfiguruj sekcje konfiguracyjne zawierać ELMAH errorFilter rozdział:

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

Krok 2: Konfiguracja filtruj się w sekcji <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>  

Krok 3: Dołącz Elmah.ErrorFilterModule wewnątrz swoich modułów aplikacyjnych

Nowoczesne (IIS7 +) wersja z tym moduł http:

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

Legacy (starszy IIS) w wersji z tym modułem http:

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

Nie używałem tego od jakiegoś czasu, ale czy nie odfiltrowuje to "ALL" 404? Chcę tylko niektóre typy plików, zobacz mój komentarz powyżej na temat zaakceptowanej odpowiedzi. Ta odpowiedź nie pomoże tbh, przepraszam – Rippo

+0

@Rippo - moje złe - to tylko ta strona pojawia się jako pierwsza, aby usunąć 404 z logowania elmah, a link w zaakceptowanej odpowiedzi jest martwy. Podsumowałem więc to, czego nauczyłem się od google :) W każdym razie zaktualizowałem swoją odpowiedź, aby dopasować również "filtruj tylko określoną ścieżkę". –