Share via


Sécurisation des contrôles de connexion

Mise à jour : novembre 2007

Les contrôles de connexion ASP.NET vous permettent d'offrir une solution de contrôle de l'accès aux pages Web en fonction de l'authentification, de l'appartenance et des rôles des utilisateurs. Ils contiennent le contrôle CreateUserWizard, le contrôle Login, le contrôle LoginStatus, le contrôle LoginView, le contrôle PasswordRecovery et le contrôle ChangePassword. Les informations contenues dans cette rubrique expliquent comment améliorer la sécurité des contrôles de connexion en appliquant les meilleures pratiques pour la configuration et le codage.

Bien que l'application des meilleures pratiques pour le codage et la configuration puisse améliorer la sécurité de votre application, il est également important de mettre à jour régulièrement votre serveur Web en installant les correctifs de sécurité les plus récents pour Microsoft Windows et les services IIS (Internet Information Services), ainsi que les correctifs pour Microsoft SQL Server ou autres sources de données.

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 l'aide fournie par le site Web Microsoft Patterns and Practices (https://www.microsoft.com/resources/practices/default.mspx).

Des informations sur des méthodes de sécurité spéciales pour d'autres types de contrôles sont également disponibles dans les rubriques suivantes :

Méthodes de sécurité générales pour les contrôles de connexion

La sécurisation des contrôles de connexion implique l'application des meilleures pratiques dans plusieurs domaines qui sont brièvement présentés ci-dessous, avec des liens vers d'autres informations.

Utilisation du protocole SSL (Secure Sockets Layer)

Les contrôles de connexion ASP.NET transmettent des informations en texte clair via HTTP. Lorsque vous traitez des informations sensibles, il est fortement recommandé d'utiliser le protocole HTTPS avec le chiffrement SSL (Secure Sockets Layer). SSL empêche la modification des données (intégrité des données), protège l'identité d'un utilisateur (confidentialité) et garantit que les données proviennent du client prévu (authentification). Pour plus d'informations, consultez Vue d'ensemble du chiffrement et Configuration de SSL sur un serveur Web ou un site Web dans la documentation IIS.

Validation des entrées d'utilisateur

Ne partez jamais du principe que les entrées provenant d'utilisateurs sont sûres. Des utilisateurs malveillants peuvent envoyer entre le client et votre application des informations potentiellement dangereuses. Pour les contrôles de connexion, il est particulièrement important de prendre des précautions avec les entrées d'utilisateur parce que les informations y sont souvent sensibles. Pour plus d'informations sur la façon de se préserver contre les entrées malveillantes, consultez Méthodes de sécurité de base pour les applications Web.

Chaque fois que cela est possible, utilisez les contrôles de validation pour tester les noms d'utilisateurs valides et les mots de passe forts. Vous pouvez valider certaines entrées d'utilisateur sans les contrôles de validation. Par exemple, le contrôle CreateUserWizard prend en charge la validation requise et de comparaison. Vous pouvez aussi spécifier une expression régulière avec la propriété EmailRegularExpression pour valider que les adresses de messagerie correspondent à un modèle spécifié et valider avec la propriété PasswordRegularExpression que les mots de passe satisfont vos exigences.

Pour garantir la plus grande flexibilité dans la validation des entrées d'utilisateur dans les contrôles de connexion, vous pouvez utiliser des modèles. Chaque fois que cela est possible, créez un modèle pour le contrôle, ajoutez des contrôles individuels (généralement des contrôles TextBox) et ajoutez des contrôles de validation pour limiter l'entrée d'utilisateur à l'entrée autorisée la plus étroite possible.

Remarque :

Lorsque vous utilisez des contrôles de validation, exécutez toujours la validation dans le code serveur en plus de l'utilisation de la validation côté client. La validation côté serveur permet également d'empêcher les utilisateurs de contourner la validation en désactivant ou en modifiant le contrôle du script client.

Pour plus d'informations, consultez Validation des entrées d'utilisateur dans des pages Web ASP.NET.

Sécurisation de l'état d'affichage

Étant donné que les contrôles de connexion stockent les informations dans l'état d'affichage de la page, il est préférable de sécuriser l'état d'affichage. Bien que les données d'état d'affichage soient stockées dans un format codé, elles peuvent être consultées et falsifiées. Pour plus d'informations, consultez Vue d'ensemble de l'état d'affichage ASP.NET.

Sécurisation de l'appartenance (membership)

L'appartenance d'ASP.NET fournit des fonctionnalités pour valider et stocker les informations d'identification de l'utilisateur. Les contrôles CreateUserWizard, Login, PasswordRecovery et ChangePassword utilisent l'appartenance d'ASP.NET pour vous permettre de créer un système d'authentification complet qui ne requiert que peu ou pas de code. En outre, les contrôles LoginName, LoginStatus et LoginView peuvent être utilisés pour compléter votre solution afin de gérer l'appartenance des utilisateurs et de contrôler l'accès aux pages de votre site Web. Pour plus d'informations, consultez Introduction à l'appartenance (membership) et Sécurisation de l'appartenance (membership).

Les fournisseurs d'appartenances livrés avec ASP.NET possèdent une valeur intégrée définissant le nombre maximal de mots de passe ou de tentatives de réponse de mot de passe non valides, comme spécifié dans la propriété MaxInvalidPasswordAttempts. L'appartenance d'ASP.NET vous permet aussi de configurer le nombre de minutes pendant lesquelles un nombre maximal de mots de passe ou de tentatives de réponse de mot de passe non valides est autorisé avant le verrouillage de l'utilisateur d'appartenance, comme spécifié dans la propriété PasswordAttemptWindow. Le seuil de tentatives de réponse de mot de passe par défaut est égal à cinq, et la fenêtre de tentatives de réponse de mot de passe par défaut s'affiche pendant dix minutes. Les seuils définis dans les fournisseurs par défaut peuvent être substitués par ceux qui sont définis dans la section membership du fichier Web.config de votre application. Si vous définissez ces seuils, il est recommandé de définir les valeurs aussi bas que possible. En outre, il est recommandé de ne pas affecter la valeur false à la propriété RequiresQuestionAndAnswer parce que le suivi des tentatives de réponse de mot de passe non valides n'est pas pris en charge. Pour plus d'informations, consultez Fournisseurs d'appartenances.

Sécurisation des messages électroniques

Les contrôles CreateUserWizard, ChangePassword et PasswordRecovery peuvent envoyer des messages électroniques comportant des informations sur la transaction utilisateur terminée. Vérifiez que les messages électroniques envoyés aux utilisateurs contiennent uniquement les informations nécessaires. Par exemple, faites en sorte que les utilisateurs non concernés ne puissent pas filtrer la ligne Objet du message électronique à partir d'autres messages électroniques. Il est recommandé de ne pas envoyer de mots de passe dans un message électronique. Tenez compte des autres méthodes de vérification des transactions de mot de passe, par exemple l'envoi d'un code de confirmation et d'une URL de retour qui requiert que les utilisateurs utilisent cette URL pour terminer la transaction.

Si la propriété MailDefinition des contrôles CreateUserWizard, ChangePassword et PasswordRecovery n'est pas spécifiée, alors aucun message électronique n'est envoyé. Lorsque ces contrôles sont configurés pour envoyer des messages électroniques, il est recommandé de gérer l'événement d'erreur de message électronique pour intercepter les erreurs SMTP et éviter de révéler des informations superflues aux utilisateurs. Pour le contrôle ChangePassword, gérez la propriété SendMailError et définissez la propriété Handled de l'objet SendMailErrorEventArgs avec la valeur true. Pour obtenir un exemple qui indique comme illustrer la gestion d'un événement d'erreur de message électronique, consultez l'événement SendMailError. Pour plus d'informations sur l'installation du service SMTP (Simple Mail Transfer Protocol), consultez Comment : installer et configurer des serveurs virtuels SMTP dans IIS 6.0.

Considération sur la sécurité pour les contrôles individuels

Les sections suivantes proposent des considérations sur la sécurité pour les contrôles de connexion.

Contrôle CreateUserWizard

Le contrôle CreateUserWizard rassemble les informations d'un utilisateur, puis crée un compte dans le système d'appartenance (membership) d'ASP.NET pour cet utilisateur. Vous pouvez étendre le contrôle CreateUserWizard pour accepter des informations supplémentaires en ajoutant des champs ou des étapes avant ou après les étapes CreateUserWizardStep et CompleteWizardStep. Un problème de sécurité peut survenir si un utilisateur ne complète pas toutes les étapes d'un contrôle CreateUserWizard, mais qu'un compte a été créé. Pour empêcher des utilisateurs de contourner des étapes de l'Assistant personnalisé, substituez la méthode OnNextButtonClick et exécutez l'authentification personnalisée. Une fois les informations sont rassemblées, utilisez la méthode CreateUser de la classe MembershipProvider pour créer l'utilisateur.

Si vous exécutez des tâches d'administration et utilisez le CreateUserWizard pour créer automatiquement des comptes d'utilisateurs, il est recommandé de définir la propriété AutoGeneratePassword avec la valeur true et la propriété LoginCreatedUser avec la valeur false. Dans ce scénario particulier, l'affectation de la valeur false à la propriété DisableCreatedUser est recommandée.

Contrôle Login

Le contrôle Login est un contrôle composite qui incorpore des zones de texte pour le nom d'utilisateur et le mot de passe, ainsi qu'une case à cocher qui indique si les utilisateurs souhaitent que les informations de connexion soient mémorisées en vue de leurs prochaines consultations de la page. La propriété RememberMeSet entraîne l'envoi d'un cookie d'authentification au navigateur de l'utilisateur et la propriété DisplayRememberMe affiche une case à cocher qui permette à l'utilisateur de contrôler l'envoi éventuel d'un cookie persistant. Évitez de définir RememberMeSet avec la valeur true et DisplayRememberMe avec la valeur false, parce qu'un cookie est envoyé, mais que l'utilisateur ne le sait pas. En général, le stockage des cookies sur les ordinateurs des utilisateurs présente des risques. Les cookies constituent une autre forme d'entrée d'utilisateur et sont, par conséquent, soumis à la divulgation et à l'usurpation d'informations. Pour plus d'informations, consultez Vue d'ensemble des cookies ASP.NET.

Si votre contrôle Login est utilisé avec un large éventail d'utilisateurs finaux, pensez à coder le contrôle de telle sorte que les utilisateurs d'ordinateurs publics aient la possibilité d'utiliser un cookie non persistant, supprimé dès que la session expire. Pour plus d'informations sur l'écriture de cookies, consultez Comment : écrire un cookie.

Contrôle LoginName

Le contrôle LoginName affiche le nom de connexion de l'utilisateur, ou le domaine et le nom de compte de l'utilisateur si l'application utilise l'authentification Windows. Pensez à ajouter une case à cocher qui permet aux utilisateurs de spécifier si leur nom ou leurs informations de compte doivent être affichés. Par exemple, les utilisateurs sur des ordinateurs publics peuvent ne pas souhaiter l'affichage d'informations sensibles.

Contrôle LoginView

Le contrôle LoginView vous permet d'afficher des informations différentes pour les utilisateurs connectés et les utilisateurs non connectés (utilisateurs anonymes). Examinez le contenu que vous affichez avec les modèles AnonymousTemplateLoggedInTemplate et tous ceux associés à la propriété RoleGroups afin de garantir que les utilisateurs ne puissent pas consulter des modèles qui ne leur sont pas destinés. En particulier, la collection de la propriété RoleGroups est recherchée dans l'ordre dans lequel les modèles sont définis. Le premier modèle de groupe de rôles correspondant est affiché à l'utilisateur. Si un utilisateur est membre de plusieurs rôles, le premier modèle de groupe de rôles qui correspond à l'un des rôles de l'utilisateur est affiché. Si plusieurs modèles sont associés à un rôle unique, seul le premier modèle défini sera utilisé. Pour plus d'informations, consultez Présentation de la gestion des rôles.

Contrôle PasswordRecovery

Le contrôle PasswordRecovery permet aux utilisateurs de récupérer leurs mots de passe en fonction des adresses de messagerie associées à leurs noms d'utilisateurs. Lorsque vous configurez le contrôle PasswordRecovery, respectez les instructions suivantes :

  • Gérez l'événement SendMailError afin d'agir si des erreurs se produisent lors de l'envoi du message électronique.

  • Définissez un nombre limité de tentatives de réponse de mot de passe avec la propriété MaxInvalidPasswordAttempts et une fenêtre horaire limitée avec la propriété PasswordAttemptWindow.

  • Vérifiez toutes les informations envoyées dans les messages électroniques adressés aux utilisateurs, ainsi que la sécurité du canal utilisé pour transmettre les messages, surtout si le message électronique de récupération du mot de passe contient des mots de passe de l'utilisateur. Évitez d'envoyer des messages électroniques marqués clairement comme contenant des informations sensibles, tels que les messages dans lesquels la ligne Objet contient le texte « mot de passe ».

Contrôle ChangePassword

Le contrôle ChangePassword permet aux utilisateurs de modifier leur mot de passe. Lorsque vous configurez le contrôle ChangePassword, respectez les instructions suivantes :

  • Gérez l'événement SendMailError afin d'agir si des erreurs se produisent lors de l'envoi du message électronique.

  • Définissez un nombre limité de tentatives de réponse de mot de passe avec la propriété MaxInvalidPasswordAttempts et une fenêtre horaire limitée avec la propriété PasswordAttemptWindow.

  • Vérifiez toutes les informations envoyées dans les messages électroniques adressés aux utilisateurs, ainsi que la sécurité du canal utilisé pour transmettre les messages, surtout si le contrôle ChangePassword est configuré pour utiliser la messagerie électronique pour envoyer le nouveau mot de passe à l'utilisateur.

  • Utilisez SSL pour garantir que le nouveau mot de passe de l'utilisateur ne peut pas être lu pendant la publication (postback).

  • Limitez l'accès au fichier que le contrôle ChangePassword utilise comme corps des messages électroniques envoyés à l'utilisateur. Ce fichier est défini par la propriété BodyFileName de la classe MailDefinition.

Voir aussi

Tâches

Comment : installer et configurer des serveurs virtuels SMTP dans IIS 6.0

Concepts

Méthodes de sécurité de base pour les applications Web

Sécurisation de contrôles standard

Sécurisation de l'appartenance (membership)

Autres ressources

Gestion des utilisateurs à l'aide de l'appartenance

Sécurisation de sites Web ASP.NET

Syntaxe des contrôles serveur de validation

Services de chiffrement