Partager via


Sécurisation de l'état de session

Mise à jour : novembre 2007

L'état de session ASP.NET vous permet de stocker et de récupérer des valeurs pour un utilisateur à mesure que ce dernier navigue dans les différentes pages ASP.NET qui composent une application Web. L'état de session ASP.NET identifie les demandes du même navigateur en tant que session dans une fenêtre à durée limitée et fait persister les valeurs variables pour la durée de cette session. Les sessions de navigateur sont identifiées dans un cookie de session ou dans l'URL lorsque l'état de session est configuré « sans cookie ».

L'état de session ASP.NET est activé par défaut pour toutes les applications ASP.NET et est configuré pour utiliser des cookies de session afin d'identifier des sessions de navigateur.

L'état de session ASP.NET stocke par défaut les valeurs de variables de session dans la mémoire, mais vous pouvez également le configurer pour qu'il stocke les valeurs de variable de session dans un serveur d'état, un serveur SQL Server ou un magasin d'état de session personnalisé.

Bien que l'application des méthodes conseillées en matière de codage et de configuration puisse améliorer la sécurité de votre application, il est également important de mettre à jour en permanence votre serveur d'application à l'aide des derniers correctifs de sécurité pour Microsoft Windows et les services IIS (Internet Information Services), ainsi que tous les correctifs pour Microsoft SQL Server, Active Directory et les autres sources de données de votre application.

Pour plus d'informations sur les méthodes conseillées relatives à l'écriture d'un code sécurisé et la sécurisation des applications, consultez le manuel Writing Secure Code de Michael Howard et David LeBlanc et l'aide fournie par Microsoft Patterns and Practices (https://www.microsoft.com/resources/practices/default.mspx).

Configuration d'état de session sécurisée

La fonction d'état de session est activée par défaut. Bien que la plupart des valeurs sécurisées soient affectées aux paramètres de configuration par défaut, vous devez désactiver l'état de session s'il n'est pas requis pour votre application. Pour plus d'informations sur les paramètres de configuration de l'état de session et leurs valeurs par défaut, consultez sessionState, élément (Schéma des paramètres ASP.NET).

Sécurisation de valeurs de configuration

Lorsque vous stockez des informations sensibles dans un fichier de configuration pour une application, vous devez chiffrer les valeurs sensibles à l'aide de la configuration protégée. Les informations ultra personnelles comprennent les clés de chiffrement stockées dans l'élément de configuration machineKey et les chaînes de connexion à la source de données stockées dans l'élément de configuration connectionStrings. Pour plus d'informations, consultez Chiffrement des informations de configuration à l'aide de la configuration protégée.

Sécurisation des connexions à une source de données de l'état de session

Chaînes de connexion

Comme nous l'avons mentionné plus haut, il est important de protéger les informations personnelles stockées dans une chaîne de connexion à un ordinateur exécutant SQL Server, au service d'état de session ou à une autre source de données. Pour préserver la sécurité de la connexion à votre serveur de données, il est recommandé de chiffrer les informations relatives à la chaîne de connexion contenues dans la configuration à l'aide de la fonction de protection de la configuration. Pour plus d'informations, consultez Chiffrement des informations de configuration à l'aide de la configuration protégée.

Connexion à SQL Server à l'aide de la sécurité intégrée

Vous devez vous connecter aux ordinateurs exécutant SQL Server à l'aide de la fonction de sécurité intégrée pour empêcher que votre chaîne de connexion ne soit compromise et votre ID d'utilisateur et mot de passe exposés. Lorsque vous spécifiez une connexion qui utilise la fonction de sécurité intégrée pour se connecter à un ordinateur exécutant SQL Server, la fonction d'état de session restaure l'identité du processus. Vous devez garantir que l'identité du processus exécutant ASP.NET (par exemple, le pool d'application) représente le compte de processus par défaut ou un compte d'utilisateur limité. Pour plus d'informations, consultez Emprunt d'identité ASP.NET et Modes d'état de session.

Sécurisation de l'ID de session

Lorsque vous protégez votre application et vos données, il est important de protéger l'identificateur de session pour qu'il ne soit pas exposé à des sources indésirables du réseau et utilisé dans une attaque par reconstitution contre votre application. Les recommandations suivantes peuvent renforcer la sécurité de votre identificateur de session.

  • Protégez votre application à l'aide de SSL (Secure Sockets Layer).

  • Spécifiez une valeur pour la session Timeout. Pensez également à forcer une redirection sur le client ayant la même longueur que le délai d'expiration de la session en utilisant un script client ou en ajoutant un en-tête de rafraîchissement à l'aide de la méthode AddHeader, comme le décrit l'exemple suivant.

    Response.AddHeader("Refresh", Session.Timeout & ";URL=Logoff.htm"
    Response.AddHeader("Refresh", Session.Timeout + ";URL=Logoff.htm";
    
  • Évitez d'utiliser des sessions sans cookie. Si vous spécifiez des sessions sans cookie, demandez aux utilisateurs de ne pas envoyer par courrier électronique, marquer d'un signet ni enregistrer des liens contenant un ID de session.

  • Évitez de spécifier des modes de cookie de AutoDetect et de UseDeviceProfile.

  • Autorisez les utilisateurs à fermer leur session au point où vous devez appeler la méthode HttpSessionState.Abandon. Demandez à l'utilisateur de fermer son navigateur après la fermeture de session.

  • Lorsque vous utilisez des sessions sans cookie, affectez la valeur true à regenerateExpiredSessionID pour démarrer toujours une nouvelle session lorsqu'un identificateur de session ayant expiré est fourni.

Sécurisez les pages Web qui utilisent l'état de session

Les pages d'application qui utilisent des données personnelles doivent être sécurisées à l'aide de mécanismes de sécurité Web standard, par exemple l'utilisation de SSL (Secure Sockets Layer) et l'obligation pour les utilisateurs d'ouvrir une session afin d'exécuter des opérations sensibles comme la mise à jour des informations personnelles ou la suppression de comptes.

En outre, les pages ne doivent pas exposer de données de fonctionnalité sensibles (telles que des mots de passe et, dans certains cas, des noms d'utilisateurs) en texte clair. Assurez-vous que les pages qui affichent de telles informations utilisent le protocole SSL et ne sont accessibles qu'aux utilisateurs authentifiés.

Messages d'erreur et événements

Exceptions

Pour empêcher que des informations sensibles ne soient exposées à des sources non autorisées, configurez votre application soit pour ne pas afficher de messages d'erreur détaillés, soit pour afficher des messages d'erreur détaillés uniquement 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 serveur exécute Windows Server 2003, vous pouvez renforcer la sécurité de votre application en sécurisant le journal des événements, puis en définissant les paramètres relatifs à la taille, la conservation (entre autres) du journal des événements afin d'empêcher une attaque par déni de service contre elle.

Fournisseurs de magasins d'état de session personnalisés

Lorsque vous créez un fournisseur de magasins d'état de session personnalisé, vérifiez que vous respectez les méthodes conseillées relatives à la sécurité pour éviter les attaques telles l'injection SQL pendant l'utilisation d'une base de données. Lorsque vous utilisez un fournisseur de magasins d'état de session personnalisé, vérifiez que le fournisseur a été vérifié conformément aux méthodes conseillées en matière de sécurité.

Voir aussi

Concepts

Vue d'ensemble de l'état de session ASP.NET

Autres ressources

Sécurisation de sites Web ASP.NET