web-dev-qa-db-fra.com

Comment sécuriser Elmah.axd?

Nous utilisons Elmah comme système de journalisation des erreurs pour une application qui entrera bientôt en production. Il est extrêmement utile, mais s'il est mis en production comme celui-ci, n'importe qui dans le monde accède au journal des erreurs car il lui suffit de visiter ourdomain.com/elmah.axd.

Ce n'est évidemment pas idéal. J'avais initialement l'intention de restreindre l'accès à cette page uniquement aux adresses IP au sein de notre entreprise, mais maintenant nos administrateurs système disent que ce n'est pas possible. Je demande donc ici comment puis-je empêcher l'accès à cette ressource?

Nous exécutons une application ASP.NET MVC sur IIS 6.

47
DaveDev

Le scénario typique de sécurisation d'elmah.axd permet à seulement certains utilisateurs authentifiés de pouvoir y accéder. Mais si votre site n'utilise aucune authentification, cela peut ne pas s'appliquer.

Voici ce que je vous recommanderais:

  1. Désactivez complètement le elmah.axd gestionnaire sur votre site principal
  2. Configurez elmah pour écrire les journaux dans une source de données partagée (comme un fichier partagé, une base de données SQLite ou même SQL Server)
  3. Configurez un deuxième site dans IIS, probablement sur un autre réseau ou serveur, qui n'a qu'elmah installé et qui pointe vers cette même source de données partagée. Maintenant, vous utiliseriez toujours le deuxième site pour lire les journaux. Évidemment, le deuxième site ne serait accessible qu'à vous.

Si vous décidez d'utiliser SQL Server, vous pouvez même lire les journaux de plusieurs applications exécutées sur plusieurs serveurs Web dans une batterie de serveurs à partir d'une seule application interne accessible uniquement à vous.

43
Darin Dimitrov

J'ai trouvé que c'était plus acceptable pour les applications MVC:

http://www.beletsky.net/2011/03/integrating-elmah-to-aspnet-mvc-in.html

21

Vous pouvez pointer le gestionnaire http elmah vers une autre URL (par exemple "Secure/elmah.axd") dans web.config. Vous pouvez sécuriser l'URL comme n'importe quelle autre page asp.net dans la configuration Web.

<httpHandlers>
  ...
  <add verb="POST,GET,HEAD" path="/Secure/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<location path="Secure" > <!-- secure the Host.com/Secure path -->
  <system.web>
    <authorization>
      <deny users="?" />
      <!-- Or anything else... -->
    </authorization>
  </system.web>
</location>

Nous utilisons avec succès cette approche sur IIS7 à l'aide des fournisseurs d'appartenance à Active Directory, et cela fonctionne très bien. Je ne sais pas si cela fonctionne sur IIS6.

16
m0sa

Si vous utilisez l'appartenance à ASP.NET, il est assez facile de restreindre l'accès au HttpHandler elmah.axd pour les utilisateurs anonymes et de n'autoriser que les utilisateurs connectés dans un groupe "Administrateurs". Je l'ai fait comme ça:

<configuration>
  ...
  <location path="elmah.axd">
    <system.web>
      <authorization>
        <allow roles="Administrators"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>

Toute personne connectée ET membre du rôle "Administrateurs" peut accéder à la page maintenant.

9
Jakob Gade
3
Giorgi

Si votre intention est d'empêcher les utilisateurs distants d'y accéder, modifiez simplement la valeur de <security allowRemoteAccess="yes" /> à <security allowRemoteAccess="no" />

3
nonexistential

J'ai utilisé des restrictions IP à partir de la configuration IIS 7. Par défaut, vous ne pouvez pas simplement l'appliquer dans <location path="elmah.axd"> car il est verrouillé au niveau de la configuration parent. En tant que tel, j'ai créé un dossier vide "logs" et appliqué des restrictions dans IIS dans ce dossier, puis modifié le chemin d'emplacement pour elmah.axd fichier. C'est tout! Vous avez accès à distance à yourdomain.com/logs/elmah.axd, mais uniquement à partir d'adresses IP spécifiques.

2
Dmitry Gulakov