Domanda

Ho problemi cercando di ottenere ELMAH. Ho seguito Phil Haacked di esercitazione , con l'unica differenza è il progetto demo è un'applicazione web e il mio progetto è un sito web.

   <add verb="POST,GET,HEAD" path="/admin/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />

   <location path="admin">
        <system.web>  
            <authorization>  
                <deny users="?"/>  
            </authorization>  
        </system.web> 
    </location>

Con il leader "/" Ricevo la risposta che "La risorsa non può essere trovato.", Se mi tolgo la porta "/" tutto funziona bene, tranne l'autenticazione può essere bypassato aggiungendo un nome di directory di fronte a / admin / elmah.axd.

Ad esempio senza lo "/"

www.mysite.com/admin/elmah.axd - innesca l'autenticazione
www.mysite.com/asdasdasd/admin/elmah.axd - non innesca l'autenticazione e visualizza ELMAH

Come posso garantire che ELMAH è sicuro, pur mantenendo la possibilità di visualizzare in remoto il registro?

Grazie.

Nota per gli altri:
Dopo la risposta di Alan sotto i risultati di seguito.

www.mysite.com/admin/elmah.axd - innesca l'autenticazione
www.mysite.com/admin/asdasdasd/elmah.axd - innesca l'autenticazione
www.mysite.com/asdasdasd/admin/elmah.axd - La risorsa non può essere trovato. (Esattamente quello che volevamo)

È stato utile?

Soluzione

Ho suonato in giro con il web.config ed ho ottenuto il seguente al lavoro. In pratica invece di mettere il HttpHandler elmah.axd nel system.web generale, aggiungerlo in particolare nel system.web del vostro "admin" posizione del percorso.

<location path="admin">
    <system.web>
        <httpHandlers>
            <add verb="POST,GET,HEAD" path="elmah.axd"
                 type="Elmah.ErrorLogPageFactory, Elmah" />
        </httpHandlers>
        <authorization>
            <deny users="?"/>
        </authorization>
    </system.web>
</location>

Altri suggerimenti

Se si utilizza ASP.NET MVC, si sta andando ad avere bisogno di avere il motore di routing ignora quel percorso. Se si desidera spostare ELMAH a /admin/elmah.axd per esempio si dovrebbe aggiungere quanto segue al Global.asax.cs:

routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");

Dopo aver trascorso un po 'cercando di ottenere questo al lavoro applicando le patch insieme i vari pezzi di consulenza da ciascuna delle risposte, ho messo insieme una soluzione completa che dovrebbe funzionare per tutte le versioni di IIS.

Ecco quello che ha bisogno di essere in ciascuna delle vostre sezioni web.config:

<configuration>
  <configSections>
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
  </configSections>

  <elmah>
    <!-- set allowRemoteAccess="0" for extra security -->
    <security allowRemoteAccess="1"/>
  </elmah>

  <system.web>
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>
  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
    </modules>
  </system.webServer>

  <location path="admin">
    <system.web>
      <authorization>
        <!--<allow users="Admin" /> -->
        <deny users="?" />
      </authorization>
      <httpHandlers>
        <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
      </httpHandlers>
    </system.web>
    <system.webServer>
      <handlers>
        <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
      </handlers>
    </system.webServer>
  </location>

</configuration>

E se si sta utilizzando Asp.Net MVC, aggiungi

routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");

nel metodo RegisterRoutes.

In IIS 7.5 Windows Server 2008, non v'è un altro sezione chiamata system.webServer. Al fine di ELMAH al lavoro, questo doveva essere aggiunto:

<system.webServer>
  <handlers>
   <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
  </handlers>
</system.webServer>

Ho provato un paio di varianti, ma non sono in grado di utilizzare la soluzione di cui sopra per la prevenzione '/Blah/elmah.axd' dal lavoro.

Qualche suggerimento su rendendo il lavoro soluzione di cui sopra per 7.x IIS?

Grazie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top