2010-06-07 23 views
25

Est-ce que quelqu'un sait exactement comment définir HTTPONLY sur les cookies de session ASP classiques?Définition de HTTPONLY pour le cookie de session ASP classique

Ceci est la dernière chose qui a été signalée dans une analyse de vulnérabilité et doit être réparée dès que possible, donc toute aide est appréciée.

~~~ A INFORMATIONS PEU PLUS SUR MON PROBLÈME ~~~

Quelqu'un peut-il me s'il vous plaît aider?

J'ai besoin de savoir comment définir HTTPONLY sur le cookie ASPSESSION créé par défaut à partir de ASP & IIS.

Il s'agit du cookie créé automatiquement par le serveur pour toutes les pages ASP.

Si nécessaire, je peux définir HTTPONLY sur tous les cookies sur le site.

Toute aide sur la façon de procéder serait massivement appréciée.

Merci

Merci Elliott

+2

Ceci est une bonne question. Avez-vous compris comment le faire? –

+0

quelle est la solution que vous avez jusqu'à présent ??? – Dhananjay

Répondre

2
Response.AddHeader "Set-Cookie", "CookieName=CookieValue; path=/; HttpOnly" 

Source: http://www.asp101.com/tips/index.asp?id=160

+4

Étant donné que ce cookie est créé par ASP & IIS par défaut, nous n'avons pas la possibilité d'ajouter ce programme par programmation. Je me demande si c'est un autre paramètre ailleurs? J'ai mis à jour KeepASPCookieSecure dans IIS Metabase.xml, je me demande si cela pourrait être un genre de correctif similaire? –

+0

S'il vous plaît noter que l'ajout du cookie en utilisant "addheader" ne -pas- ajouter le cookie à la collection request.cookies() dans ASP dans la même demande. Le cookie ne sera visible que dans la portée request.cookies après un navigateur-roundtrip. Cela diffère de la commande response.cookies() habituelle, qui rendra le cookie disponible dans la portée request.cookies dans la même requête. –

0

This page a beaucoup d'informations qui sont pertinentes à votre problème.

.NET 1.1 n'ajoute pas HttpOnly car il n'a pas encore été inventé.

Si votre application fonctionne sous .NET 2.0 (j'ai déplacé plusieurs sites ASP classiques vers la version 2.0 pratiquement inchangée) HttpOnly est défini par défaut. Si je le lis correctement, vous pouvez obtenir le cookie de session et lui ajouter ; HttpOnly;. Il donne un exemple java:

String sessionid = request.getSession().getId(); 
response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; HttpOnly"); 

Enfin, il suggère:

si les modifications du code sont infaisables, les pare-feu d'application web peut être utilisé pour ajouter HttpOnly aux cookies de session

Edité ajouter: à ceux qui pensent migrer vers .NET (qui peut accepter la plupart des codes ASP classiques inchangés) est un changement trop radical pour obtenir une si petite fonctionnalité, mon expérience des filtres ISAPI est qu'ils aussi peut être une douleur majeure, et dans certaines situations courantes (hébergement partagé) vous ne pouvez pas les utiliser du tout.

+5

Désolé si vos downvotes n'étaient pas clairs mais le changement de votre site entier de ASP classique à .NET semble être une entreprise assez importante juste pour obtenir des cookies de session HttpOnly. Je pense que c'est la raison des downvotes. –

10

Microsoft comprend un exemple en utilisant un filtre ISAPI pour tous les cookies sortants: http://msdn.microsoft.com/en-us/library/ms972826

ou URL rewriting pourrait être utilisé http://forums.iis.net/p/1168473/1946312.aspx

<rewrite> 
     <outboundRules> 
      <rule name="Add HttpOnly" preCondition="No HttpOnly"> 
       <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" /> 
       <action type="Rewrite" value="{R:0}; HttpOnly" /> 
       <conditions> 
       </conditions> 
      </rule> 
      <preConditions> 
       <preCondition name="No HttpOnly"> 
        <add input="{RESPONSE_Set_Cookie}" pattern="." /> 
        <add input="{RESPONSE_Set_Cookie}" pattern="; HttpOnly" negate="true" /> 
       </preCondition> 
      </preConditions> 
     </outboundRules> 
    </rewrite> 
+8

Bien que cela fonctionne - je dois vous informer que si l'une de vos pages ASP classiques a Response.Buffer = false, la page sera pure poubelle. – Jason

+0

Toute personne ayant des problèmes pour implémenter ce code, vous devez d'abord activer la réécriture d'URL pour IIS [http://www.iis.net/downloads/microsoft/url-rewrite] – MarceloBarbosa

+0

Pour moi, l'indicateur HTTP dans dev tools est défini sur true , mais après une seconde, le drapeau sera supprimé. Cela a-t-il quelque chose à voir avec l'utilisation de HTTPS? –

2

Si vous avez IIS7 +, vous devez vous assurer que le module de réécriture d'URL est installé. Vous pouvez l'installer avec le programme d'installation de la plateforme Web. Le programme d'installation de la plateforme Web se trouve dans la vue des fonctionnalités de votre site Web. Vous devez exécuter le Gestionnaire des services Internet en tant qu'administrateur.

Run IIS As Administratro

Cliquez sur la plate-forme Web Installer dans les fonctionnalités vue pour votre site:

Web Platform Installer

Maker que l'URL produit Rewrite Server est installé. Si ce n'est pas le cas, installez-le.

Url Rewrite Server Product

Avec l'URL Rewrite Server produit installé, vous pouvez utiliser l'URL Rewrite fonction sur votre site Web pour ajouter une règle pour ajouter HttpOnly pour votre session cookies ID.

URL Rewrite Feature

enter image description here

Add HttpOnly Outbound Rule

Vous devriez voir, si elle n'existe pas déjà, un fichier web.config créé pour votre site ASP. il aura le contenu suivant:

enter image description here

Si vous utilisez Firebug dans Firefox pour inspecter vos cookies, vous devriez maintenant voir le drapeau HttpOnly:

enter image description here

+1

Bien expliqué..Great job !! –