161 votes

Comment puis-je définir l'indicateur Secure sur un cookie de session ASP.NET ?

Comment puis-je définir l'indicateur de sécurité sur un cookie de session ASP.NET, afin qu'il ne soit transmis que par HTTPS et jamais par HTTP ordinaire ?

200voto

Martin Eden Points 1432

Dans le <system.web> ajoutez l'élément suivant :

<httpCookies requireSSL="true" />

Cependant, si vous avez un <forms> dans votre system.web\authentication ce qui aura pour effet de remplacer le paramètre dans le bloc httpCookies pour revenir à la valeur par défaut false .

Dans ce cas, vous devez ajouter l'élément requireSSL="true" à l'élément forms.

Vous vous retrouverez donc avec :

<system.web>
    <authentication mode="Forms">
        <forms requireSSL="true">
            <!-- forms content -->
        </forms>
    </authentication>
</system.web>

Voir aquí y aquí pour la documentation MSDN de ces éléments.

4 votes

Vous pouvez éviter que d'autres paramètres web.config ne prennent le pas sur votre paramètre <httpCookies requireSSL="true" /> en incluant l'attribut "lockItem". Comme ceci : <httpCookies requireSSL="true" lockItem="true" />. Plus d'informations ici dotnetnoob.com/2010/11/comment-sécuriser-aspnet-cookies.html

4 votes

En outre, s'il y a un roleManager son attribut cookieRequireSSL="true" doit également être défini comme vrai. Réf. msdn.microsoft.com/fr/us/library/

1 votes

En ajoutant les changements ci-dessus dans les fichiers connexes, les objets de session ne fonctionnent pas dans mon application, ils deviennent nuls. comment puis-je alors rectifier ce problème ?

140voto

Akash Kava Points 18026

Il y a deux façons, l'une httpCookies élément dans web.config vous permet d'allumer requireSSL qui transmet tous les cookies, y compris les cookies de session, uniquement en SSL et également dans l'authentification des formulaires, mais si vous activez SSL sur httpcookies, vous devez également l'activer dans la configuration des formulaires.

Modifier pour plus de clarté : Mettez ça dans <system.web>

<httpCookies requireSSL="true" />

15 votes

+1 Pour clarifier, voici ce que vous devez ajouter au web.config pour définir le drapeau sécurisé sur le cookie d'authentification à true <httpCookies requireSSL="true" />

10 votes

Notez que cela dépend de votre configuration (au niveau du serveur). J'ai fait tomber la région de test avec l'erreur "L'application est configurée pour émettre des cookies sécurisés. Ces cookies nécessitent que le navigateur émette la requête via SSL (protocole https). Cependant, la demande actuelle n'est pas sur SSL". Cela s'explique par le fait que nous avons mis en place un proxy inverse et que les navigateurs s'y connectent via SSL, mais que le proxy inverse vers le serveur IIS passe par le port 80, de sorte que l'application n'a pas pensé qu'elle était sécurisée.

6 votes

@Bargitta Nous avons traité l'événement Application_PreSendRequestHeaders et si un certain paramètre de l'application est vrai, nous avons défini todo des cookies à sécuriser. Ce paramètre de l'application n'est défini que pour nos sites externes HTTPS.

24voto

Mark D Points 1759

Les choses se gâtent rapidement si l'on parle de code vérifié dans un environnement d'entreprise. Nous avons constaté que la meilleure approche consiste à avoir le web.Release.config contiennent les éléments suivants :

<system.web>
  <compilation xdt:Transform="RemoveAttributes(debug)" />
  <authentication>
      <forms xdt:Transform="Replace" timeout="20" requireSSL="true" />
  </authentication>
</system.web>

De cette façon, les développeurs ne sont pas affectés (ils fonctionnent en mode Debug), et seuls les serveurs qui obtiennent des versions Release exigent que les cookies soient SSL.

2 votes

^^^C'est le chemin. Plus d'informations sur les transformations Web.Config : go.microsoft.com/fwlink/?LinkId=125889

6voto

Jeff Mergler Points 634

En me basant sur la réponse de @Mark D, j'utiliserais les transformations web.config pour définir tous les différents cookies sur Secure. Cela inclut le paramétrage de anonymousIdentification cookieRequireSSL et httpCookies requireSSL .

Pour cela, vous devez configurer votre web.Release.config comme :

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
    <httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    <anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" /> 
  </system.web>
</configuration>

Si vous utilisez l'authentification par rôles et formulaires avec l'option ASP.NET Membership Provider (je sais, c'est ancien), vous voudrez également définir l'attribut roleManager cookieRequireSSL y el forms requireSSL comme sécurisés également. Si c'est le cas, votre web.release.config pourrait ressembler à ceci (inclus ci-dessus plus de nouvelles balises pour l'API d'adhésion) :

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
    <httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    <anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" /> 
    <roleManager xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" />
    <authentication>
        <forms xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    </authentication>
  </system.web>
</configuration>

Informations sur les transformations web.config ici : http://go.microsoft.com/fwlink/?LinkId=125889

Évidemment, cela va au-delà de la question initiale de l'OP, mais si vous ne les configurez pas tous en mode sécurisé, vous pouvez vous attendre à ce qu'un outil d'analyse de sécurité le remarque et que des drapeaux rouges apparaissent sur le rapport. Demandez-moi comment je le sais :)

1voto

Sanjeev Kumar Points 21

Secure - Cet attribut indique au navigateur de n'envoyer le cookie que si la demande est envoyée par un canal sécurisé tel que HTTPS. Cela permet d'éviter que le cookie ne soit transmis par des requêtes non cryptées. Si l'application est accessible à la fois via HTTP et HTTPS, il est possible que le cookie soit envoyé en clair.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X