Partager via


Sécurisation de contrôles standard

Mise à jour : novembre 2007

Les contrôles standard d'ASP.NET représentent un groupe de contrôles qui vous permettent de créer des formulaires dans lesquels les utilisateurs tapent ou sélectionnent des informations avant que la page ne soit publiée sur le serveur. Les contrôles standard sont les contrôles serveur Web qui héritent de la classe Control. Les exemples de contrôles serveur Web incluent les contrôles TextBox, Image et AdRotator. Les informations de cette rubrique décrivent les méthodes conseillées en matière de configuration et de codage qui vous aideront à améliorer la sécurité des contrôles standard.

Même si l'application des méthodes conseillées 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 application à jour avec les dernières mises à jour de sécurité de Microsoft Windows et d'Internet Information Services (IIS), ainsi qu'avec les mises à jour de sécurité Microsoft SQL Server ou autres sources de données.

Pour plus d'informations sur les méthodes conseillées 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 ou l'aide fournie par Microsoft Patterns and Practices.

Des informations concernant les pratiques de sécurité spéciales pour d'autres types de contrôles sont également disponibles dans les rubriques suivantes :

Contrôle AdRotator

Le contrôle AdRotator affiche les informations de publication définies dans un fichier de publication, qui, par défaut, est un fichier XML. Vous pouvez également stocker les publicités dans une base de données et les extraire par programme. Pour aider à sécuriser le contrôle AdRotator, respectez les instructions suivantes :

  • Si vous utilisez un fichier XML pour stocker les informations de publication, placez le fichier dans le dossier App_Data du site Web, parce que le contenu du dossier ne sera pas transmis en réponse aux demandes Web.

  • Pour des raisons de protection supplémentaire, n'utilisez pas l'extension .xml pour les fichiers de publication. À la place, utilisez une extension comme .ads, puis mappez cette extension à ASP.NET dans IIS et au gestionnaire Interdit dans ASP.NET à l'aide de l'élément suivant du fichier Web.config du site :

    <httpHandlers>
      <add verb="*" path="*.ads" type="System.Web.HttpForbiddenHandler" />
    </httpHandlers>
    

    Pour plus d'informations sur la façon de mapper une extension de nom de fichier avec ASP.NET dans IIS, consultez Comment : enregistrer des gestionnaires HTTP.

  • Définissez les autorisations appropriées (généralement, en lecture seule) pour les comptes d'utilisateurs qui liront le fichier de publication. Si le site Web prend en charge l'accès anonyme, il s'agit généralement du compte d'utilisateur local ASPNET ou du compte SERVICE RÉSEAU.

  • Si le fichier de publication n'existe pas, le contrôle AdRotator déclenche une erreur qui affiche le chemin d'accès et le nom du fichier, et de ce fait révèle des informations virtuellement sensibles. Pour éviter ce problème, appliquez les techniques de gestion des erreurs appropriées, en incluant la définition de l'élément customErrors dans le fichier de configuration pour rediriger une page d'erreur personnalisée et en créant un gestionnaire d'erreurs globales qui est appelé si une exception non gérée se produit quelque part dans l'application. Pour plus d'informations, consultez Comment : afficher des messages d'erreur sécurisés.

  • Si vous lisez les informations de publicité à partir d'une base de données, appliquez les instructions relatives à la sécurisation de l'accès à la base de données. Pour plus d'informations, consultez Sécurisation de l'accès aux données.

  • Examinez attentivement toutes les informations de publication que vous obtenez d'une source non fiable avant de les utiliser avec le contrôle AdRotator. Étant donné que le contrôle AdRotator n'effectue ni validation ni contrôle des informations qu'il lit à partir du fichier de publication, il affiche les images et les URL sur la page Web telles qu'elles apparaissent dans le fichier ou la base de données de publication.

BulletedList, CheckBoxList, RadioButtonList, DropDownList, ListBox

Les contrôles BulletedList, CheckBoxList, DropDownList, ListBox et RadioButtonList restituent les différents types d'éléments HTML (ul, input et select) basés sur le contenu de collections ou sur les données d'une base de données. Pour aider à sécuriser ces contrôles, respectez les instructions suivantes :

Contrôle Calendar

Le contrôle Calendar affiche les contrôles LinkButton pour activer la navigation dans le calendrier. Les contrôles LinkButton utilisent le script client pour effectuer une publication. Si un navigateur a désactivé le script client pour des raisons de sécurité, le contrôle Calendar ne prendra pas en charge la navigation.

Vous pouvez toujours utiliser le contrôle Calendar pour afficher des dates, même si vous ne l'utilisez pas pour activer la navigation de date. Ne pensez pas que toutes les dates d'un contrôle Calendar sont formatées correctement. Lors de la conversion des dates du contrôle Calendar en un format DateTime interne, vérifiez que vous utilisez une technique de gestion des erreurs appropriée si la date ne s'affiche pas au format correct.

Contrôle FileUpload

Le contrôle FileUpload permet aux utilisateurs de télécharger un fichier de leur ordinateur vers le serveur Web. Pour aider à sécuriser le contrôle FileUpload, respectez les instructions suivantes :

  • Ne vous fiez pas aux fichiers téléchargés par les utilisateurs ; des utilisateurs malveillants peuvent tenter de télécharger des fichiers exécutables. Lorsque vous enregistrez un fichier téléchargé, vérifiez son extension ou assignez-lui votre propre extension.

  • N'autorisez pas les utilisateurs à spécifier un chemin arbitraire pour l'emplacement dans lequel le fichier téléchargé sera enregistré. Vérifiez que le nom du fichier ne contient pas d'informations relatives au chemin que vous n'avez pas ajoutées vous-même.

  • Ne dévoilez pas la structure interne de votre site Web aux utilisateurs qui téléchargent des fichiers.

  • Définissez sur le ou les dossiers dans lesquels seront enregistrés les fichiers téléchargés des autorisations en lecture/écriture pour le ou les comptes d'utilisateurs qui exécuteront l'application. Si le site Web prend en charge l'accès anonyme, il s'agit en général du compte d'utilisateur ASPNET local ou du compte SERVICE RÉSEAU. Toutefois, limitez les autorisations en lecture/écriture aux dossiers où l'application stocke les fichiers téléchargés.

  • Protégez-vous contre les attaques par déni de service en définissant l'attribut maxRequestLength de l'élément httpRuntime du fichier de configuration. Par défaut, la longueur maximale de la demande est de 4 mégaoctets (Mo). Les autres paramètres de configuration qui peuvent affecter la taille des fichiers téléchargés sont l'attribut requestLengthDiskThreshold de l'élément httpRuntime et l'attribut memoryLimit de l'élément processModel.

  • Déterminez la taille du fichier téléchargé en interrogeant la propriété ContentLength de l'objet HttpPostedFile retourné par le contrôle et utilisez cette taille pour décider s'il faut accepter le fichier.

Contrôle HiddenField

Le contrôle HiddenField vous permet de définir le contenu des éléments <input type="hidden"> HTML du code serveur. Les champs masqués permettent de stocker les informations de la page utiles lors du traitement des pages, mais elles ne doivent pas être visibles pour les utilisateurs. Pour aider à sécuriser le contrôle HiddenField, respectez les instructions suivantes :

  • Ne stockez pas d'informations sensibles dans les contrôles HiddenField. Bien que les informations ne soient pas visibles dans le navigateur, elles font partie de la page et les utilisateurs peuvent facilement les consulter dans la source de la page.

  • Ne faites pas confiance aux informations des champs masqués. Des utilisateurs malveillants peuvent falsifier le contenu des champs masqués.

Lien hypertexte

Le contrôle HyperLink affiche une URL sur le navigateur. Vérifiez que l'URL pointe sur un emplacement de confiance.

Contrôles Image et ImageMap

Pour afficher des graphiques, les contrôles Image et ImageMap affichent une URL sur le navigateur. Vérifiez que l'URL pointe sur un emplacement de confiance.

Contrôle ImageButton

Le contrôle ImageButton affiche une image (élément img) qui utilise le script client pour effectuer une publication. Si un navigateur a désactivé le script client pour des raisons de sécurité, le contrôle ne fonctionnera pas.

Pour afficher le graphique, le contrôle affiche une URL sur le navigateur. Vérifiez que l'URL pointe sur un emplacement de confiance.

Contrôles Label et Literal

Les contrôles Label et Literal affichent du texte sur la page en le passant tel quel au navigateur. (Le contrôle Label vous permet en outre de spécifier une mise en forme.) Si le texte contient un balisage HTML, par défaut, le navigateur l'interprète et rend le texte en conséquence, ce qui peut inclure l'exécution de scripts.

Si vous utilisez le contrôle Label et que vous ne savez pas si le texte pourrait contenir du texte malveillant, utilisez le codage HTML pour remplacer le contenu HTML par sa représentation textuelle. Pour plus d'informations, consultez Comment : se protéger contre les attaques de script dans une application Web en utilisant le codage HTML.

Si vous utilisez le contrôle Literal et que vous ne savez pas si le texte pourrait contenir du contenu malveillant, procédez comme suit :

Pour plus d'informations, consultez Comment : se protéger contre les attaques de script dans une application Web en utilisant le codage HTML.

Contrôle LinkButton

Le contrôle LinkButton affiche un lien (élément a) qui utilise le script client pour effectuer une publication. Si un navigateur a désactivé le script client pour des raisons de sécurité, le contrôle ne fonctionnera pas.

MultiView

Le contrôle MultiView vous permet d'ajouter plusieurs contrôles View et de les afficher conditionnellement. Cela vous permet de créer des pages qui ressemblent à des formulaires à plusieurs pages.

Si vous basculez d'un affichage à l'autre en fonction d'un élément qui peut être aisément falsifié, comme une chaîne de requête d'URL, vous risquez de permettre à un utilisateur de consulter un affichage qu'ils ne sont pas censés voir. Par conséquent, vérifiez que les mécanismes de basculement entre affichages sont parfaitement sécurisés. Pour plus d'informations, consultez Vue d'ensemble de la gestion d'état ASP.NET.

Contrôle TextBox

Comme le contrôle TextBox permet aux utilisateurs d'entrer presque tout type de texte dans la page, vous devez être vigilant lorsque vous acceptez les entrées d'utilisateur avec ce contrôle. Pour aider à sécuriser le contrôle TextBox, respectez les instructions suivantes :

  • Utilisez les contrôles de validation dans la mesure du possible pour limiter le texte saisi par les utilisateurs aux valeurs acceptables. Pour plus d'informations, consultez Introduction aux contrôles Validation.

  • Vérifiez que la propriété IsValid a la valeur true avant d'exécuter votre code serveur.

  • Utilisez la validation de serveur redondante. Cela se vérifie spécialement pour les contrôles CustomValidator ; ne créez pas uniquement une logique de validation côté client.

  • Définissez la propriété MaxLength du contrôle TextBox pour limiter la quantité de texte que les utilisateurs peuvent entrer. Des utilisateurs malveillants peuvent affecter les performances de votre application, et provoquer éventuellement des erreurs de base de données, en envoyant d'énormes quantités d'informations dans une zone de texte.

  • Codez les entrées d'utilisateur à l'aide de la méthode HtmlEncode qui change HTML en représentation textuelle (par exemple, <b> devient &ltb&gt;) et permet d'éviter l'exécution de HTML dans un navigateur. Pour plus d'informations, consultez Comment : se protéger contre les attaques de script dans une application Web en utilisant le codage HTML.

  • Définissez la propriété TextMode avec la valeur Password pour empêcher le contenu de la zone de texte de s'afficher dans la zone de texte (en affichant des points). Notez que la définition de la propriété TextMode avec la valeur Password ne fournit aucune autre protection ; le contenu de la zone de texte n'est pas chiffré ou obscurci et les informations sont envoyées au serveur comme texte clair. Par conséquent, lors de l'utilisation de Password, fournissez des méthodes supplémentaires pour garantir que les données sont sécurisées.

  • Si vous collectez des informations sensibles, comme un mot de passe ou un numéro de carte de crédit, utilisez le protocole SSL pour sécuriser la communication entre le client et le serveur. Cela s'applique à toute utilisation des contrôles TextBox, y compris ceux qui incorporent les contrôles TextBox, comme le contrôle CreateUserWizard.

Assistant

Le contrôle Wizard vous permet de créer des formulaires d'entrée à plusieurs étapes. Prenez en compte les aspects suivants relatifs à la sécurité lorsque vous utilisez le contrôle Wizard :

  • L'Wizard ne protège pas, par nature, les informations sensibles. Si vous rassemblez les données sensibles dans l'Assistant, utilisez SSL pour sécuriser la communication entre le client et le serveur pour la page contenant l'objet Wizard.

  • pour prendre en charge ses fonctionnalités, le contrôle Wizard inclut un certain nombre de contrôles invisibles. Un utilisateur peut potentiellement manipuler ces contrôles et leurs valeurs pour afficher les étapes de l'Assistant de manière désordonnée ou n'en afficher que pour certains utilisateurs. Pour empêcher ce comportement, vérifiez que les étapes de l'Assistant sont affichées dans le bon ordre et que celles contenant des informations sensibles ne sont pas affichées, à moins que les conditions correctes ne s'appliquent.

Contrôle XML

Le contrôle Xml affiche le contenu d'un fichier XML ou d'une chaîne contenant XML sur une page en appliquant éventuellement une transformation XML. Pour aider à sécuriser le contrôle Xml, respectez les instructions suivantes :

  • si possible, lorsque vous affichez le contenu d'un fichier XML, placez ce dernier dans le dossier App_Data de votre site parce que le contenu du dossier ne sera pas transmis publiquement en réponse aux événements Web ;

  • affichez uniquement XML à partir de sources fiables ;

  • utilisez uniquement des transformations provenant de sources fiables.

Voir aussi

Concepts

Sécurisation des contrôles de connexion

Sécurisation des pages WebPart

Sécurisation de l'accès aux données