Sécurisation des pages du journal des erreurs
Vous pouvez sécuriser l'affichage ou les flux d'ELMAH de deux manières :
- Activation ou désactivation de l'accès à distance
- Autorisation ou refus d'accès via l'autorisation ASP.NET
Ces deux points sont abordés dans les sous-sections suivante.
Activation ou désactivation de l'accès à distance
ELMAH propose une section de configuration et un paramètre permettant d'activer ou de désactiver l'accès à distance à l'affichage du journal des erreurs et aux flux. Lorsque cette option est désactivée (par défaut), seul l'accès local à l'affichage du journal des erreurs et aux flux est autorisé. L'extrait ci-dessous explique comment activer l'accès à distance :
<elmah>
<security allowRemoteAccess="1" />
</elmah>
L'accès à distance est activé lorsque la valeur de l'attribut allowRemoteAccess est 1, yes, true ou on. Sinon, il est désactivé. L'accès local est toujours disponible.
Déclarer les sections de configuration attendues
Assurez-vous d'avoir déclaré les sections de configuration attendues afin d'appliquer la configuration ci-dessus.
Autorisation ou refus d'accès via l'autorisation ASP.NET
Si vous devez activer l'accès à distance, il est primordial de le sécuriser uniquement pour les utilisateurs autorisés. Vous pouvez le faire grâce au mécanisme d'autorisation intégré d'ASP.NET.
Différents emplacements d'un site web peuvent être sécurisés avec différentes règles d'autorisation. Supposons que votre application Web soit déployée à l'adresse http://www.example.com/ et qu'ELMAH soit configuré pour répondre à elmah.axd. Vous pouvez sécuriser http://www.example.com/elmah.axd contre les utilisateurs non autorisés en ajoutant un élément d'emplacement à votre configuration comme suit :
<location path="elmah.axd">
<system.web>
<httpHandlers>
<add verb="POST,GET,HEAD"
path="elmah.axd"
type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<authorization>
<deny users="*" />
</authorization>
</system.web>
<system.webServer>
<handlers>
<add name="ELMAH"
verb="POST,GET,HEAD"
path="elmah.axd"
type="Elmah.ErrorLogPageFactory, Elmah"
preCondition="integratedMode" />
</handlers>
</system.webServer>
</location>
Il y a trois points importants à noter ici :
- Les enregistrements de gestionnaire doivent être déplacés sous la balise location. Leur présence à l'extérieur ne garantit pas un accès suffisant.
- L'attribut path de l'élément location a la même valeur que celui des enregistrements de gestionnaire. Malheureusement, il doit être répété ; si vous en modifiez un, les autres doivent donc être mis à jour en conséquence.
- L'élément authorization contient les règles d'autorisation et vous souhaitez accorder l'accès de manière sélective.
L'exemple de configuration ci-dessus refuse l'accès à tous les utilisateurs, mais c'est un bon point de départ. Vous souhaiterez probablement ajouter des règles n'autorisant l'accès qu'à des utilisateurs et/ou des rôles spécifiques. Par exemple, vous pourriez avoir un rôle pour les administrateurs et les développeurs, appelé respectivement admin et dev. Pour autoriser les utilisateurs membres de l'un ou l'autre rôle, vous pouvez configurer la section d'autorisation ci-dessus comme suit :
<authorization>
<allow roles="admin" />
<allow roles="dev" />
<deny users="*" />
</authorization>