Sécurisation de la navigation de site ASP.NET

Mise à jour : novembre 2007

La navigation du site ASP.NET fournit des fonctionnalités servant à entretenir un magasin central de liens menant à toutes les pages d'un site Web. Les liens peuvent ensuite être rendus sous forme de listes ou de menus de navigation sur chaque page en incluant un contrôle serveur Web spécifique.

La navigation du site ASP.NET s'utilise le plus souvent avec des contrôles de navigation, tels que les contrôles SiteMapPath, SiteMapDataSource, TreeView et Menu. Elle est, sinon, utilisée par programme avec les classes SiteMap et SiteMapProvider. Les informations de cette rubrique décrivent comment améliorer la sécurité des fonctionnalités de navigation.

Même si l'application des meilleures pratiques en matière de codage et de configuration peut vous aider à renforcer la sécurité de votre application, il est également important de tenir votre serveur d'applications à jour avec les dernières mises à jour de sécurité de Microsoft Windows et des Services Internet (IIS), ainsi qu'avec les mises à jour de Microsoft SQL Server ou d'autres sources de données d'appartenance. Pour plus d'informations, consultez le site Web Windows Update.

Pour plus d'informations sur les meilleures pratiques en matière d'écriture de code sécurisé et de sécurisation des applications, consultez le manuel « Writing Secure Code », de Michael Howard et David LeBlanc, et reportez-vous à l'aide fournie par le site Web Microsoft Patterns and Practices. Voir aussi Méthodes de sécurité de base pour les applications Web.

Les fonctions ASP.NET de navigation sur site sont activées par défaut. Elles peuvent être désactivées en donnant à l'attribut enabled de l'élément siteMap la valeur false dans le fichier de configuration (Web.config). La section suivante traite de la sécurisation des données liées à la navigation dans le fichier Web.config. Pour plus d'informations sur les paramètres de configuration de la navigation et leurs valeurs par défaut, consultez siteMap, élément (Schéma des paramètres ASP.NET).

Sécurisation de valeurs de configuration

Vous n'avez pas besoin de sécuriser les paramètres de configuration de la navigation contenus dans un fichier Web.config si vous utilisez le fournisseur sitemap ASP.NET par défaut. Toutefois, si vous implémentez un fournisseur sitemap personnalisé qui utilise une base de données et si vous stockez la chaîne de connexion à une base de données dans un fichier de configuration, suivez les recommandations de Sécurisation de l'accès aux données pour chiffrer cette chaîne de connexion.

Dans un environnement hébergé, le fichier de configuration doit refuser les droits de substitution de l'élément siteMap (voir siteMap, élément (Schéma des paramètres ASP.NET)) afin de mieux empêcher quiconque de reconfigurer le site dans le but d'utiliser un plan de site ou un fournisseur de plan de site différent. Pour plus d'informations, consultez Verrouillage des paramètres de configuration. Voir aussi Sécurité des applications ASP.NET dans les environnements hébergés.

Mappage d'URL

Dans un fichier de configuration, les URL peuvent être mappées sur une URL conviviale avec l'élément urlMappings, élément (Schéma des paramètres ASP.NET) dans le fichier Web.config. ASP.NET n'autorise qu'une syntaxe relative à l'application, par exemple, ~/filename.aspx. Autrement dit, ASP.NET ne permet pas aux URL mappées de pointer vers une page située en dehors de l'application. Il s'agit là d'une protection contre toute tentative d'un client ISP de consulter une page située en dehors de son application dans un environnement hébergé.

Par défaut, ASP.NET est configuré pour empêcher les clients de télécharger les fichiers avec des extensions de nom de fichier connues telles que .sitemap. Pour mieux protéger vos données, placez tous les fichiers de données sitemap personnalisés dont l'extension n'est pas .sitemap dans le dossier App_Data et appliquez toutes les fonctions de liste de contrôle d'accès appropriées (ACL). Par exemple, sur Windows 2000 ou Windows XP, n'accordez au compte de processus ASP.NET qu'un accès en lecture seule. Sur Windows 2003, n'accordez au Service réseau qu'un accès en lecture seule. Pour plus d'informations, consultez Listes de contrôle d'accès requis par ASP.NET.

La navigation du site ASP.NET ne chargera un fichier sitemap que si le fichier existe dans la structure du répertoire de l'application. Cela contribue à empêcher que les applications d'un environnement hébergé ne voient leurs données sitemap chargées par une autre application.

La navigation du site ASP.NET n'autorise pas l'accès aux fichiers en dehors de la structure du répertoire de l'application. Si un plan de site contient un nœud qui référence un autre fichier sitemap et si l'emplacement du fichier se trouve en dehors de l'application, une exception se produit. Cette exception contient le chemin d'accès spécifié dans SiteMapNode, en le répertoriant comme se trouvant en dehors de la portée d'application, mais elle n'indique pas si le chemin d'accès est valide. Cela contribue à empêcher que quelqu'un se serve de la navigation du site ASP.NET pour découvrir des chemins d'accès valides sur un serveur.

Pour plus d'informations sur la façon d'aider à protéger vos données sitemap en implémentant un fournisseur sitemap personnalisé qui utilise une base de données, consultez Sécurisation de l'accès aux données.

Processus de chargement de plan de site

Le fournisseur sitemap ASP.NET par défaut charge les données sitemap sous forme de document XML qu'il met en cache en tant que données statiques lorsque l'application démarre. Un fichier sitemap très volumineux peut utiliser une grande quantité de mémoire et de puissance de l'unité centrale au moment du chargement. Dans un environnement hébergé, limitez la taille des plans de sites que les clients sont autorisés à créer pour leurs sites. Cela constitue une protection contre les attaques par déni de service.

Les fonctionnalités de navigation du site ASP.NET se basent sur les notifications de fichier pour mettre à jour les données de navigation. Lorsqu'un fichier sitemap est modifié, ASP.NET recharge les données sitemap. Cela peut poser problème si votre structure de navigation du site est composée de plans de sites enfants sur lesquels les utilisateurs disposent d'un accès en écriture. Ces utilisateurs pourraient ne pas comprendre que chacune de leurs modifications provoquera un rechargement. Veillez à limiter l'accès à tous les fichiers sitemap. Définissez vos groupes d'utilisateurs en fonction de qui est autorisé à mettre les fichiers à jour et à quels emplacements, puis définissez les autorisations de fichiers sitemap en fonction des divers groupes d'utilisateurs.

La navigation du site ASP.NET permet de sécuriser individuellement des nœuds sitemap à l'aide d'un rôle. Si vous souhaitez masquer une partie de la structure de navigation de votre site à certains utilisateurs, vous pouvez activer la suppression de la sécurité ASP.NET. Une fois activé, ASP.NET vérifie l'autorisation de l'URL et éventuellement vérifie les autorisations d'accès au fichier répertorié dans un nœud sitemap. ASP.NET n'affiche le lien vers ce fichier que si l'utilisateur dispose du droit d'accès correspondant. Si vous souhaitez permettre à tous les utilisateurs de consulter un lien menant à un fichier à accès réservé, donnez à l'attribut roles des nœuds sitemap correspondants la valeur astérisque (*) ou un caractère générique, ce qui permettra à tous les clients de consulter le lien. Pour plus d'informations, consultez Suppression de la sécurité sitemap ASP.NET.

Inclusion d'URL externes dans un plan de site

Dans un plan de site, vous pouvez référencer des URL qui se trouvent en dehors de votre application ASP.NET. Toutefois, l'accès à une URL située en dehors de l'application ne peut pas être testé par ASP.NET. Par exemple, si vous créez un nœud sitemap qui correspond à et si vous activez la suppression de la sécurité, le lien hypertexte ne sera pas visible pour les clients, ASP.NET ne pouvant pas tester les autorisations d'accès à une URL externe. Si vous activez la suppression de la sécurité et vous avez des nœuds sitemap qui correspondent à des URL externes, donnez à l'attribut roles de ces nœuds la valeur astérisque (*), ce qui permettra à tous les clients de consulter le lien, bien qu'ASP.NET ne puisse pas en autoriser l'accès.

Les classes de navigation du site sont publiquement disponibles pour tout code qui s'exécute sur l'ordinateur. Elles s'exécutent avec un niveau de confiance minimal. Toutefois, un niveau de confiance faible est requis pour charger des données sitemap. En effet, ASP.NET doit utiliser des opérations d'E/S de fichier pour ouvrir un fichier sitemap à l'aide du fournisseur sitemap par défaut, XmlSiteMapProvider. Si vous le souhaitez, vous pouvez développer un fournisseur sitemap personnalisé qui ne sera pas soumis à cette restriction.

Pour plus d'informations, consultez Fichiers de stratégie et niveaux de confiance ASP.NET et Implémentation de fournisseurs sitemap ASP.NET.

Lorsque vous implémentez un fournisseur sitemap personnalisé, assurez-vous que celui-ci applique les meilleures pratiques en termes de sécurité. Cela est particulièrement important dans le cas d'un scénario d'hébergement où un fournisseur sitemap personnalisé qui n'aurait pas été correctement implémenté pourrait laisser filtrer des informations ou contenir des paramètres de configuration par défaut non sécurisés. Respectez les meilleures pratiques pour éviter les attaques, comme les attaques d'injection SQL. Vous devez, par exemple, toujours vérifier la saisie des paramètres.

Pour plus d'informations sur la sécurisation d'une base de données, consultez Sécurisation de l'accès aux données. Voir aussi Sécurité des applications ASP.NET dans les environnements hébergés.

Les sections suivantes traitent de la façon de limiter les problèmes de sécurité potentiels exposés par des messages d'erreur et des événements inattendus.

Messages d'exception

Les exceptions levées par les fonctionnalités de navigation du site ASP.NET n'exposent pas d'informations privilégiées. Passez en revue et testez les classes personnalisées de votre application Web pour y rechercher des entrées et des demandes non valides afin d'éviter d'exposer des informations privilégiées en cas d'exception.

Messages d'erreur

Pour contribuer à éviter l'exposition d'informations sensibles à des sources indésirables, n'activez des erreurs personnalisées pour votre application ou n'affichez des messages d'erreur détaillés que lorsque le client est le serveur Web lui-même. Pour plus d'informations, consultez customErrors, élément (Schéma des paramètres ASP.NET).

Journal des événements

Si votre ordinateur fonctionne sous Windows Server 2003, vous pouvez aider à améliorer la sécurité de votre application en sécurisant le journal des événements. Définissez également des paramètres concernant la taille, la durée de conservation, etc., du journal des événements pour mieux empêcher les attaques indirectes par déni de service contre le journal. Par défaut, seuls les membres du groupe de sécurité administrateurs peuvent visualiser les journaux d'événements. Pour plus d'informations sur la configuration des journaux d'événements, recherchez « Observateur d'événements » dans l'aide et support de Windows.

Les outils de type antivirus ne doivent pas être configurés pour modifier des fichiers sitemap. Cela provoque un rechargement inutile des données de navigation dans la mesure où les fonctionnalités de navigation du site ASP.NET s'appuient sur les notifications de fichier pour conserver les données de navigation à jour.

Afficher: