Suppression de la sécurité sitemap ASP.NET
Mise à jour : novembre 2007
La limitation de l'autorisation de consulter certaines pages à quelques membres et à d'autres utilisateurs authentifiés est une condition de sécurité courante des sites Web. La gestion des rôles ASP.NET permet de limiter l'accès aux fichiers Web en fonction des rôles de sécurité. La fonction de suppression de la sécurité sitemap permet de masquer les liens de navigation d'un plan de site, également en fonction des rôles de sécurité. Pour plus d'informations sur la sécurité basée sur les rôles, consultez Présentation de la gestion des rôles.
Mode de fonctionnement de la suppression de la sécurité sitemap
Prenez en compte la structure de navigation suivante, qui s'affiche dans une page ASP.NET.
Home
Products
Hardware
Software
Discounts
Services
Training
Consulting
Support
Les clients qui ne sont pas membres d'un rôle appelé Customers ne sont pas autorisés à afficher la page Web Support par une règle d'accès ASP.NET configurée pour la page Support.aspx.
Pour masquer le lien Support dans l'affichage de navigation, configurez le fournisseur sitemap du fichier Web.config pour activer la fonction de suppression de la sécurité. Aucune modification supplémentaire n'est nécessaire parce que l'application utilise les autorisations d'URL ASP.NET et de fichier pour masquer le lien à la page Support. Le contrôle XmlSiteMapProvider intégré dans la version 2.0 d'ASP.NET vérifie automatiquement les autorisations sur chaque nœud sitemap à l'aide des fonctions d'autorisation d'URL et de fichier.
Si vous souhaitez afficher le lien Support aux clients qui ne figurent pas dans le rôle Customers, vous pouvez utiliser l'attribut roles du nœud sitemap du fichier Support.aspx. L'attribut roles développe l'accès à un nœud sitemap au-delà du niveau d'accès qu'accordent les autorisations d'URL et de fichier.
L'exemple de code suivant affecte la valeur Customers à l'attribut roles de la page Support. Une fois la fonction de suppression de la sécurité activée, ce paramètre permet aux utilisateurs du rôle Customers d'afficher le lien de navigation à la page Support, même s'ils ne sont pas autorisés à afficher le fichier réel via les autorisations d'URL ou de fichier.
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<!-- other <siteMapNode> elements -->
<siteMapNode title="Support" description="Support"
url="~/Customers/Support.aspx" roles="Customers" />
</siteMap>
Les utilisateurs qui ne sont pas membres du rôle Customers peuvent consulter la structure de navigation suivante s'ils ne sont pas autorisés à afficher la page Support à cause des règles d'autorisation d'URL ou de fichier.
Home
Products
Hardware
Software
Discounts
Services
Training
Consulting
Activation de la fonction de suppression de la sécurité
La fonction de suppression de la sécurité fonctionne de manière conjointe avec les rôles ASP.NET. Par conséquent, les pages doivent être limitées à l'aide des règles d'accès (éléments allow et deny) pour que la suppression de la sécurité fonctionne. Pour plus d'informations sur les règles d'accès, consultez Gestion de l'autorisation à l'aide de rôles.
La fonction de suppression de la sécurité n'est pas activée par défaut et ne peut pas être activée par programme non plus. Elle ne peut être définie que dans le fichier Web.config. Il en est de même pour les classes personnalisées qui héritent de la classe SiteMapProvider.
Pour activer la fonction de suppression de la sécurité, vous devez configurer un élément siteMap, élément (Schéma des paramètres ASP.NET) dans votre fichier Web.config. Si votre plan de site utilise le fournisseur sitemap ASP.NET par défaut, le fichier Web.config peut ne pas contenir d'élément siteMap, élément (Schéma des paramètres ASP.NET), auquel cas vous devez en ajouter un. L'exemple de code suivant ajoute le fournisseur sitemap par défaut et active la fonction de suppression de la sécurité.
<system.web>
<!-- …other configuration settings -->
<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
<providers>
<add name="XmlSiteMapProvider"
description="Default SiteMap provider."
type="System.Web.XmlSiteMapProvider "
siteMapFile="Web.sitemap"
securityTrimmingEnabled="true" />
</providers>
</siteMap>
</system.web>
Considérations sur les performances
La fonction de suppression de la sécurité utilise l'autorisation d'URL sur chaque demande pour déterminer si un utilisateur a accès à une URL associée à un élément siteMapNode. Ce travail supplémentaire réduit les performances en fonction du nombre de nœuds autorisés. Lorsque la fonction de suppression de la sécurité est activée, vous pouvez utiliser les méthodes suivantes pour améliorer les performances :
Limiter le nombre de nœuds dans les fichiers sitemap Dans les fichiers sitemap contenant plus de 150 nœuds, les opérations de suppression de la sécurité peuvent être beaucoup plus longues.
Affecter explicitement à l'attribut roles la valeur siteMapNode éléments Notez que l'affectation d'un caractère générique ou d'un astérisque à l'attribut roles ne doit s'effectuer que pour les nœuds qui s'affichent sans risque à un client. La présence d'un attribut roles permet à ASP.NET de contourner l'autorisation d'URL de l'URL associée à l'attribut siteMapNode lorsqu'un utilisateur appartient à l'un des rôles répertoriés dans cet attribut.
Sélection de rôles pour empêcher la suppression involontaire
Pour empêcher la suppression involontaire de nœuds sitemap enfants, configurez les règles d'autorisation et les attributs de rôles avec précaution. Prenez en compte la structure de navigation suivante, qui s'affiche dans une page ASP.NET.
Home
Products
Hardware
Les règles d'autorisation d'URL ou de fichier définies dans le fichier Products.aspx ne doivent pas être plus restrictives que celles définies dans le fichier Hardware.aspx. Sinon, le lien Hardware ne s'affichera pas aux utilisateurs qui doivent être en mesure de le consulter parce que le lien parent à Products sera masqué. Pour afficher les liens masqués, ajoutez aux deux nœuds sitemap un attribut roles qui répertorie les rôles ASP.NET négligés.
Il est recommandé que le nœud racine d'un plan de site autorise l'accès à tout le monde. Pour ce faire, affectez un astérisque (*) ou un caractère générique à l'attribut roles comme le montre l'exemple de code ci-dessous.
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<siteMapNode title="Home" description="Home"
url="default.aspx" roles="*">
<!-- other <siteMapNode> elements -->
</siteMapNode>
</siteMap>
Dans un plan de site, vous pouvez référencer des URL qui se trouvent en dehors de votre application Web. L'accès à une URL en dehors de l'application ne peut pas être testé par ASP.NET. Par conséquent, si vous activez la fonction de suppression de la sécurité, le nœud sitemap ne sera pas visible tant que vous n'affecterez pas un astérisque (*) à l'attribut des rôles, ce qui permet à tous les clients d'afficher le nœud sitemap sans passer au préalable par le test de l'URL.
Utilisation de la fonction de suppression de la sécurité avec plusieurs plans de sites ou fournisseurs
Vous pouvez utiliser plusieurs plans de sites ensemble pour définir la structure de navigation d'un site Web unique. Par exemple, un fichier Web.sitemap est similaire à un fichier Web.config parce qu'il peut être fractionné et placé dans différents dossiers.
Les plans de sites sont liés les uns aux autres par une référence à un fichier sitemap enfant ou fournisseur de l'attribut siteMapFile ou provider d'un objet SiteMapNode du plan de site parent.
L'exemple de code suivant décrit un nœud sitemap qui référence un autre plan de site.
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<!-- other <siteMapNode> elements -->
<siteMapNode siteMapFile="~/Customers/Customers.sitemap"
securityTrimmingEnabled="true" />
</siteMap>
Membres API affectés par la fonction de suppression de la sécurité
Vous pouvez utiliser les contrôles de navigation pour ajouter une navigation de site à vos pages avec ou sans code, mais vous pouvez également travailler par programme avec la navigation de site. Lorsque votre application Web s'exécute, ASP.NET affiche un objet SiteMap qui reflète la structure sitemap. Tous les membres de l'objet SiteMap sont statiques. L'objet SiteMap, à son tour, affiche une collection d'objets SiteMapNode qui contient des propriétés pour chaque nœud du plan. Il en est ainsi parce que si vous utilisez le contrôle SiteMapPath, celui-ci fonctionne avec les objets SiteMap et SiteMapNode pour afficher automatiquement les liens appropriés.
Vous pouvez utiliser les objets SiteMap, SiteMapNode et SiteMapProvider dans votre propre code pour parcourir la structure sitemap ou créer un contrôle personnalisé pour afficher les données sitemap. Vous ne pouvez pas écrire dans le plan de site, mais vous pouvez modifier les nœuds sitemap dans l'instance de l'objet. Pour plus d'informations, consultez Comment : modifier par programme des nœuds sitemap dans la mémoire ou Comment : énumérer par programme des nœuds sitemap.
ASP.NET utilise le fournisseur sitemap par défaut, XmlSiteMapProvider, pour lire le fichier Web.sitemap. Si vous souhaitez stocker les informations sitemap dans un emplacement autre que le fichier sitemap, vous pouvez créer votre propre fournisseur sitemap et configurer votre application pour appeler ce dernier. Le fournisseur sitemap est configuré dans le fichier Web.config. Lorsque l'application s'exécute, ASP.NET appelle votre fournisseur qui peut récupérer les informations sitemap. Ensuite, ASP.NET crée et remplit les objets SiteMapNode en fonction des informations retournées par votre fournisseur. Ces objets sont accessibles par programme à l'aide de la classe SiteMap. Pour plus d'informations, consultez Implémentation de fournisseurs sitemap ASP.NET.
Note de sécurité : |
---|
L'implémentation d'un fournisseur sitemap personnalisé qui stocke des données sitemap dans un fichier dont l'extension n'est pas .sitemap représente un risque potentiel au niveau de la sécurité. 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 aider à la protection de 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. Pour plus d'informations, consultez Sécurisation de la navigation de site ASP.NET. |
Lorsqu'elle est activée, la fonction de suppression de la sécurité affecte le comportement de certains membres des classes SiteMap, SiteMapNode et SiteMapNodeCollection. Lorsque vous utilisez ces classes, vous observez le comportement suivant :
Une valeur null est retournée par un membre API de la navigation de site s'il essaie de référencer un nœud sitemap dont l'utilisateur ne dispose pas des droits de sécurité pour le consulter. Par exemple, les propriétés CurrentNode, NextSibling, ParentNode et PreviousSibling retournent une valeur null si elles essaient de retourner un nœud sitemap limité.
Si un membre API de la navigation de site doit accéder à l'arborescence des nœuds sitemap, ceux que l'utilisateur n'est pas autorisé à consulter sont exclus du parcours. Par exemple, lorsque la méthode ChildNodes s'exécute, la collection de nœuds est filtrée pour n'inclure que les nœuds accessibles par l'utilisateur. Dans le cas des membres API qui doivent suivre les chemins des nœuds, tels que les méthodes Clone ou IsDescendantOf, les chemins se terminent par des nœuds limités. Cela peut provoquer des opérations de clonage qui retournent un nombre limité de nœuds. Cela peut également entraîner le retour d'une valeur false par la méthode IsDescendantOf même si, de manière structurelle, un nœud peut en réalité être descendant du nœud demandé.
Une exception InvalidOperationException est retournée si un membre API de la navigation de site référence un nœud racine dont l'utilisateur ne dispose pas des droits de sécurité pour le consulter. Seul le nœud racine du fournisseur racine doit être accessible à tous les utilisateurs, ce qui empêche le retour d'une exception lors de la première obtention de l'objet SiteMap.
Une exception ConfigurationException est levée si un objet SiteMapNode référence un autre fichier ou fournisseur sitemap de manière incorrecte.
Remarque : |
---|
Dans un plan de site, vous pouvez référencer des URL qui se trouvent en dehors de votre application Web. L'accès à une URL en dehors de l'application ne peut pas être testé par ASP.NET. Par conséquent, si vous activez la fonction de suppression de la sécurité, le nœud sitemap ne sera pas visible tant que vous n'affecterez pas un astérisque (*) à l'attribut des rôles, ce qui permet à tous les clients d'afficher le nœud sitemap sans passer au préalable par le test de l'URL. |
Voir aussi
Tâches
Procédure pas à pas : filtrage des nœuds sitemap en fonction des rôles de sécurité
Concepts
Sécurisation de la navigation de site ASP.NET
Sécurisation de l'accès aux données
Autres ressources
Gestion de l'autorisation à l'aide de rôles
Sécurité des applications ASP.NET dans les environnements hébergés