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

PHP & Base de données Discussion :

Sécurité sur le processus d'inscription et d'authentification


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Par défaut Sécurité sur le processus d'inscription et d'authentification
    Bonjour, je m'apprête à réaliser mon premier projet perso en php. A cet effet je développe un site où des membres pourront s'inscrire et s'authentifier pour modifier leur compte. Alors après avoir lu un tas de tuto et de doc, j'ai retenu ce process en stockant mes Session ID dans une base. Est ce que vous pouvez me dire si au niveau sécurité le processus que j'ai choisi est bon.



    Alors de manière général voici le process que je compte mettre en place.


    Lors de l'inscription je stock le unername, le password et un code de validation dans la table USER. Le password est crypté en sha1 et le code de validation c'est un md5.

    A la suite de l'inscription il y a une validation de compte qui se fait par mail. Je ne l'ai pas représenté ici.

    Une fois le compte validé, si l'utilisateur tente de se connecter. Je vérifie que le couple login et password existe dans la table USER. Si le couple existe, il retourne un userID que je stock avec la sessionId ici SID dans la table SESSION plus d'autres infos comme l'IP la date d'enregistrement des données dans la table.

    Ainsi si l'utilisateur souhaite accéder à une page protégé, par exemple s'il veut voir sa page mon compte, si l'utilisateur est connecté donc un sessionID en cours, je le récupère et compare avec celui qu'il y a dans la table session. Si le sessionID existe dans la table session, alors le userId est retourné. J'utilise ensuite ce userId pour aller récupérer dans la table USER le username et le password que je retourne ensuite dans ma vue Mon compte.

    Voilà le process, est ce que vous pensez qu'il est assez sécurisé sinon où est ce que je dois renforcer mon process. Merci à tous ceux qui voudront me répondre.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 33
    Par défaut
    Je ne comprend pas bien ce que tu veux sécuriser en fait...

    Je suppose que le but est d'éviter un vol de session. La plus grande partie de la sécurité se retrouve dans le mot de passes de tes utilisateurs: il faut savoir que les mots de passes les plus souvent utilisés sont abcde, azerty et 123456. En gros, il faudrait que tu vérifies que le password fait bien minimum 6 caractères dont 2 chiffres, 2 lettres minuscules et 2 majuscules (ca peut être d'avoir un mot de passe pareil).

    Sinon, vis-à-vis de la sécurité de tes codes, tu peux faire des recherches sur les attaques "SQL inject" ou sur le "Cross-Site scripting".

    Sinon, j'ai une petite remarque, mais ce n'est que mon avis et je ne suis pas beaucoup plus loin que débutant en PHP non plus.
    Quand tu parles de la table de sessions, je suppose que tu parles des variables de sessions (accessible par $_SESSION), si c'est le cas, (et si j'ai toujours bien compris); à chaque fois qu'un utilisateur va se connecter vers une page qu'il souhaite voir, tu vas récupérer son Id et faire une requête SQL pour récupérer son nom et son prénom... Pourquoi ne pas avoir
    $_SESSION['id']
    $_SESSION['prenom']
    $_SESSION['nom']

    Voilà, j'espère avoir répondu a ta question

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Par défaut
    Bonjour Zuurstof en fait je voulais savoir si mon processus d'inscription et d'authentification illustré ci-dessus était correcte. C'est à dire est ce que le fait de stocker le SID de l'utilisateur dans une table session était approprié et si c'est c'était bien d'utiliser ce SID stocker pour aller récupérer les données de l'utilisateur dans ma table USER.

    Ensuite lorsque je parle de la table session c'est vraiment une table nommée session que je crée dans mysql. A l'intérieur je stock la sessionID de l'utilisateur connecté. Ensuite lorsque je souhaite afficher une page de données de cet utilisateur, je regarde si la sessionID en cours est égale à la sessionId stockée dans ma table. Si oui alors je retourne le userID et je récupère les infos. C'est en tout ce processus que j'aurais souhaité savoir si c'est assez sécurisé ou que faut il faire pour éviter au mieux des intrusions ?

    Merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut
    Citation Envoyé par zuurstof Voir le message
    Je ne comprend pas bien ce que tu veux sécuriser En gros, il faudrait que tu vérifies que le password fait bien minimum 6 caractères dont 2 chiffres, 2 lettres minuscules et 2 majuscules (ca peut être d'avoir un mot de passe pareil).
    Bonjour,

    Je serai interessé par ceci, Comment faire pour que le code php vérifie et impose ceci ?

    Merci pour votre aide.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 33
    Par défaut
    Citation Envoyé par yamatoshi Voir le message
    Bonjour Zuurstof en fait je voulais savoir si mon processus d'inscription et d'authentification illustré ci-dessus était correcte. C'est à dire est ce que le fait de stocker le SID de l'utilisateur dans une table session était approprié et si c'est c'était bien d'utiliser ce SID stocker pour aller récupérer les données de l'utilisateur dans ma table USER.

    Ensuite lorsque je parle de la table session c'est vraiment une table nommée session que je crée dans mysql. A l'intérieur je stock la sessionID de l'utilisateur connecté. Ensuite lorsque je souhaite afficher une page de données de cet utilisateur, je regarde si la sessionID en cours est égale à la sessionId stockée dans ma table. Si oui alors je retourne le userID et je récupère les infos. C'est en tout ce processus que j'aurais souhaité savoir si c'est assez sécurisé ou que faut il faire pour éviter au mieux des intrusions ?

    Merci
    Le processus d'inscription est correct, juste une remarque SHA1 et MD5 sont exécutés coté serveur (fonction PHP), le mot de passe sera donc en clair dans les paquets envoyés (Utilisation de HTTPS?), mais quand même garder la fonction de hachage en cas de hack du serveur. L'utilisation d'un ID pour chaque utilisateur est approprié et même fortement conseillé pour faciliter la gestion des différentes tables SQL.
    Le processus d'authentification est correct également.
    Fais juste attention de te protéger contre le SQL inject (en ajoutant de "\" HTML dans les string (htmlentities ($string)) , ou en interdisant les guillemets, apostrophe, (back)slash ou point virgule dans ce qui est entré par l'utilisateur)

    Pour la table session, ce n'est que mon avis, mais je ne la ferai pas. Et ce pour plusieurs raisons:
    1. Comment sauras-tu qu'un utilisateur est déloggué s'il ferme son navigateur sans cliquer sur déconnexion? L'avantage des sessions est qu'elles expirent, tu n'auras donc jamais de tuples qui traînent
    2. A chaque demande de la page, tu vas devoir refaire une requête SQL pour récupérer les informations utilisateurs, ce qui peut être lourd
    3. Tu vas etre obligé de stocker un cookies ou une session (préférer les sessions: moins facilement manipulable que les cookies); pourquoi ne pas y stocker les variables dont tu as besoin?


    Sinon, il n'y a rien de mal fait dans ton schéma,. Ce que je dis ici n'est qu'un point de vue personnel et peut-être qu'une autre personne ne pensera pas comme moi

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 33
    Par défaut
    Citation Envoyé par mikael2235 Voir le message
    Bonjour,

    Je serai interessé par ceci, Comment faire pour que le code php vérifie et impose ceci ?

    Merci pour votre aide.
    L'utilisation d'une fonction javascript est plus appropriée étant donné qu'en PHP, le mot de passe sera envoyé sur le serveur, testé et puis on recevra seulement la réponse de sa validité. Mais évidemment, il faut prévoir la même fonction coté serveur pour ceux qui n'ont pas activé le javascript dans leur navigateur.
    Je n'ai jamais vraiment fait de telle fonction, en général, je me limite a une taille supérieure à 8 caractères.
    Pour javascript, il existe le script http://www.passwordmeter.com/js/pwdmeter.js qui est en license GNU (ou une bonne source d'inspiration). Pour PHP, il suffit de refaire la même fonction en traduisant.
    Désolé de ne pouvoir t'aider plus

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 21
    Par défaut
    je dirais comme zuurstof :
    -Échappe les données reçues
    -Si tes données internes sont sensibles, pense a sécurisé la communication entre le client/serveur

    Si tu veux utiliser une table de session, il faut aussi mettre une date de fin, sinon impossible de savoir si la session a expiré ou pas, comme dit plus haut.
    Aller rechercher les données à chaque fois c'est pas forcément nécessaire, si c'est données redondantes (genre nom, prénom, etc), met les dans la session et réutilise les.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Apparement tu fais ta propre gestion de session indépendante de celle de php?

    Mais tu ne parles pas dans ta description de comment tu crées de nouvelles sessions, ni de comment se terminent les sessions, ni de comment tu vas retrouver à partir d'une requête HTTP entrante à quelle session elle doit être associée.

Discussions similaires

  1. demande d'information sur les processus sql server
    Par patrick B dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/11/2005, 14h04
  2. Agir à distance sur les processus des utilisateurs
    Par kuranes dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 11/10/2005, 10h18
  3. Sécurité sur serveur apache
    Par Beaunico dans le forum Apache
    Réponses: 8
    Dernier message: 13/04/2004, 07h03

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