IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

De la gestion d'authentification par session [Débutant]


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut De la gestion d'authentification par session
    Bonsoir,

    Mes questions ici ont peu à voir avec le langage lui-même mais plutôt avec la sûreté des procédures utilisées.
    En effet je me demande actuellement quel est le plus sûr moyen de gérer l'authentification à un site web par session.

    Admettons que j'ai dans ma base de données une table Utilisateur avec pour champs _Login et _MDP.
    Comment gérer l'authentification sur mon site ?
    Bien sûr, après avoir validé le formulaire de connexion, vérifier la correspondance login/mdp est très simple, mais ma question porte sur la suite :
    Une fois que cette connexion a été approuvée, que dois-je ou que puis-je stocker en session pour garder la connexion de l'utilisateur active par la suite ?
    Je stocke bien évidemment le login.
    Dois-je également stocker en session le hash du mot de passe, pour ensuite à chaque page refaire une vérification du couple login/mdp ?
    Ou bien dois-je faire confiance à la session et ne pas renouveler les tests, mais simplement me baser sur le login stocké en session ?

  2. #2
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Je te conseille de regarder les MembershipProvider. Si tu utilises une base de données SQL Server tu as la classe SqlMembershipProvider.
    http://msdn.microsoft.com/fr-fr/libr...(v=vs.80).aspx

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut
    J'ai connaissance de cela, mais si justement je veux m'en passer au profit de mon propre système ?

  4. #4
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Si le SqlMembershipProvider ne te correspond pas, rien ne t'empêche d'implémenter ton provider en héritant de la classe MembershipProvider.

    Pour garder la connexion active tu peux utiliser la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormsAuthentication.SetAuthCookie(UserName, RememberMe);
    pour se déconnecter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormsAuthentication.SignOut();

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut
    Je te remercie pour tes réponses, néanmoins je vais poser la question autrement car je désire vraiment ne pas passer par ce système.
    Ma demande pourrait se résumer en fait à "est-ce que stocker en session login et hash du mot de passe" est sécure ? Afin de refaire les tests à chaque page.
    Et aussi, est-ce qu'en .NET et IIS, il est facile d'usurper des sessions ? Car je viens du monde PHP, et je sais qu'il est possible de voler ou "spoofer" des sessions.

  6. #6
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Citation Envoyé par jgrmstr Voir le message
    Je te remercie pour tes réponses, néanmoins je vais poser la question autrement car je désire vraiment ne pas passer par ce système.
    Tu ne sais pas ce que tu rate ! Tu ne pourra pas utiliser tous les mécanismes mis en place dans le framework dotnet et qui permettent de se simplifier la vie.

    Citation Envoyé par jgrmstr Voir le message
    Ma demande pourrait se résumer en fait à "est-ce que stocker en session login et hash du mot de passe" est sécure ?
    La session permet de stocker des valeurs seulement accessible par le serveur pour chaque utilisateur. Tu n'a pas besoin de mettre le login et le mot de passe dans la session. Un booléen indiquant si l'utilisateur est connecté pourrait suffire.
    Voici un lien expliquant ce qu'il faut stocker dans la variable de session, vu que c'est ce que tu souhaite faire
    http://stackoverflow.com/questions/1...225668#1225668

    PS: Ne stocke jamais le hash du mot de passe seul dans la base de données. Il faut utiliser un sel en plus ! Chaque utilisateur a donc un login, un sel et un hash (SHA256 par exemple)

    Citation Envoyé par jgrmstr Voir le message
    Et aussi, est-ce qu'en .NET et IIS, il est facile d'usurper des sessions ? Car je viens du monde PHP, et je sais qu'il est possible de voler ou "spoofer" des sessions.
    C'est possible. De la à dire que c'est simple il y a un grand pas.
    La sécurité est un domaine très large qui part du matériel pour aller au logiciel. Ca ne sert pas à grand chose de sécuriser au niveau de ton site, si les connexions sont en http et non en https (un exemple parmis tant d'autres).


    Voici quelques liens expliquant la manière dont l'authentification est gérer en dotnet
    http://support.microsoft.com/kb/910443
    http://msdn.microsoft.com/en-us/library/ff647070.aspx
    http://msdn.microsoft.com/en-us/libr...ionticket.aspx

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut
    Merci pour le post sur les sessions, celui-ci a évaporé quelques-uns de mes doutes.

    Au passage, les SqlMemberShipProvider m'intéressent quand même, mais pour des projets parallèles (d'ailleurs je ne trouve pas facilement de documentation en français sur le sujet, ou bien de projet de démo).

    PS :
    Pour le salage, je ne vois pas trop l'intérêt : si un intrus peut voir le contenu de ma BDD, il verra aussi le sel..?

  8. #8
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Citation Envoyé par jgrmstr Voir le message
    Pour le salage, je ne vois pas trop l'intérêt : si un intrus peut voir le contenu de ma BDD, il verra aussi le sel..?
    Par exemple si tu recherches le hash md5 "dcf7fb88d38b9cbc0719c4d47af0b9ca" dans google tu verra que le mot de passe original est "TestPass". Cela est possible car il existe des rainbow tables qui contiennent en fait l'association mot de passe, hash. Si tu as le hash tu peux retrouver le mot de passe.
    En ajoutant un sel tu rend ces tables inefficace. L'attaquant devra les recalculer pour chaque utilisateur, ce qui bien sur prend beaucoup de temps. De plus si tu utilises une fonction de hash qui prend un peu de temps, l'attaquant sera dans l'impossibilité de calculer les rainbow tables.
    Pour info les MD5 sur un PC portable se bruteforce à plusieurs millions de hash par seconde. Je te laisse essayer par toi même http://3.14.by/en/md5.
    Personnellement j'utilise l'algo SHA-512.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'authentification par root à l'ouverture de session Fedora
    Par marcandre dans le forum RedHat / CentOS / Fedora
    Réponses: 3
    Dernier message: 04/02/2009, 17h39
  2. gestion d'alarme par SMS
    Par kitsune dans le forum Développement
    Réponses: 2
    Dernier message: 19/07/2005, 12h31
  3. [1.1] Authentification par formulaire
    Par kakek dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/05/2005, 09h37
  4. [Struts]Gestion des timeout de session
    Par JohnBlatt dans le forum Struts 1
    Réponses: 3
    Dernier message: 13/12/2004, 14h49
  5. Réponses: 9
    Dernier message: 17/04/2004, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo