2010-06-16 4 views
1

Je développe l'application qui stocke le rôle de l'utilisateur et de l'utilisateur en cours dans l'état de session (System.Web.SessionState.HttpSessionState Page.Session).XSS pour modifier l'état de la session ASP.NET

 if (Session["username"] == null) 
      Session.Add("username", User.Identity.Name); 

     if (Session["isAdministrator"] == null) 
      Session.Add("isAdministrator", User.IsInRole(domain + "\\Domain Admins")); 

Après avoir vérifié ces états de session dans le code derrière pour accorder des autorisations à certains excecution:

if ((bool)Session["isAdministrator"] || computer.Administrators.Contains(Session["username"].ToString())) 

Ma question suivante est: comment ce mécanisme est en sécurité? Est-il possible de changer les états de session en utilisant du JavaScript par exemple ou d'une autre manière?

Merci :)

Répondre

1

Il n'est pas possible de modifier la session état en utilisant javascript ou d'autres mécanismes côté client, car l'état est uniquement stocké sur le serveur. Cependant, comme d'autres l'ont souligné, il est possible pour un utilisateur malveillant de pirater une session en obtenant le contenu du cookie de session. ASP.NET est conçu avec cette faiblesse à l'esprit - l'ID de session est suffisamment long et difficile à prévoir. En outre, le cookie de session est marqué comme HTTP UNIQUEMENT, ce qui signifie que la plupart des navigateurs modernes n'autorisent pas le code javascript pour y accéder.

0

En général, je dirais que ce qui est très à l'abri des attaques XSS. ASP.Net, par défaut, suit une session d'utilisateurs basée sur un cookie qui contient l'ID de session des utilisateurs. Vous pouvez le voir si vous ouvrez la liste des cookies de votre navigateur et cherchez ceux de votre site, il y en aura un nommé ASP.Net Session quelque chose ... Le SessionID est unique, et non incrémental. Probablement une certaine variance d'un GUID. Pour plus de sécurité, vous pouvez également spécifier, dans votre fichier web.config, la durée de vie d'une session utilisateur. Si vous traitez des informations sensibles, vous pouvez définir cette temporisation comme une période relativement courte, par exemple 10 minutes d'inactivité. La valeur par défaut est 20 minutes. Vous pouvez trouver plus d'informations @http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.timeout.aspx.

<system.web> 
    <sessionState timeout="10" /> 
</system.web> 

--Peter

2

Si User.Identity.Name est réglé, pourquoi avez-vous besoin de le mettre dans le Session? Pourquoi n'appelez-vous pas simplement User.IsInRole(domain + "\\Domain Admins") directement (ou enveloppez-vous dans une aide)? Il me semble que vous utilisez l'authentification Windows, la définition du nom d'utilisateur dans la session est donc redondante. En ce qui concerne votre question XSS, la session stocke l'ID de session dans un cookie, donc en théorie un attaquant pourrait renifler le trafic HTTP ou injecter du code JavaScript dans vos pages, récupérer le cookie, puis l'utiliser et usurper l'identité d'un autre utilisateur.

+0

Oui, merci. Je pense qu'il est préférable de comparer User.Identity.Name directement et non la valeur de l'état de la session. –