2010-10-17 5 views
3

Est-il sécuritaire de stocker un mot de passe dans une variable de session? Par exemple, l'utilisation serait sous une forme qui est soumise à elle-même. Par exemple, une page de modification des annonces, où les utilisateurs entrent d'abord un mot de passe, puis, si passez = ok, affichez le formulaire pour modifier le classement. Tout sur la même page php. Mais à chaque fois qu'une image est téléchargée dans la partie "modifier" de la page php, le formulaire doit se soumettre à nouveau à lui-même.Enregistrer "mot de passe est ok" dans la variable de session php?

Devrais-je utiliser ici le magasin Mot de passe de session pour vérifier que l'utilisateur est réellement l'utilisateur et qu'il est sécurisé?

En d'autres termes, est-il sûr de stocker quelque chose comme ceci:

if($pass==$row['password']){ // If password was correct 
    $_SESSION['pass_ok']='1'; 
} 

Merci

+1

Sidenote: Je recommande d'utiliser === et! == au lieu de == et! = Autant que possible. L'utilisation négligente de == peut facilement conduire à des problèmes de sécurité, car les règles PHP pour la comparaison entre les différents types sont un peu étranges. – CodesInChaos

Répondre

10

Camran, ce que vous essayez de faire est un moyen standard pour maintenir les sessions php. En fait, vous ne stockez pas le mot de passe dans la session plutôt que de stocker les informations que cet utilisateur a déjà enregistrées. $ _SESSION ['pass_ok'] = '1';

Sur chaque page, vous devez simplement faire un session_start() et la vérification de cette session est déjà définie sur 1, si oui, ils supposent qu'il soit connecté et que vous procèderez, sinon rediriger vers la page de connexion.

Si quelqu'un obtient l'identifiant de session, il peut accéder à la session de l'utilisateur. Vous pouvez faire quelques choses pour le rendre plus sûr.

  • utiliser le protocole SSL (https), il fera du mal à renifler les données et obtenir votre identifiant de session
  • maintenir l'IP du client dans la session lorsque l'utilisateur se connecte, pour chaque demande après la connexion, vérifier si la Les demandes proviennent de la même adresse IP
  • Définissez un délai d'attente de session court, de sorte que si la session est inactive pendant un certain temps, la session expire automatiquement.
+1

+1 L'utilisateur ne peut pas modifier ses propres variables de session, si souvent nous mettons simplement un nom d'utilisateur dans '$ _SESSION ['user']' ou similaire si un utilisateur est connecté. Si cette valeur est manquante, l'utilisateur est anonyme . –

-2

Je conseillerais contre elle. Si quelqu'un se connecte et copie l'identifiant de session, il peut théoriquement se connecter à n'importe quelle page. Je voudrais plutôt vous conseiller de vérifier que le mot de passe est correct à chaque actualisation de la page car cela sera plus sûr.

En outre, toujours stocker les mots de passe hachés dans une base de données, ou mieux encore, haché avec des sels.

+1

Que diriez-vous de le stocker crypté dans une session php? Et le décrypter à chaque fois, de sorte que l'utilisateur ne doit pas entrer à chaque fois qu'ils téléchargent une image? –

+0

Eh bien, vous ne le crypteriez pas; vous le feriez. Donc, vous passeriez à travers quelque chose comme sha1, puis lorsque l'utilisateur entre leur mot de passe vérifier les mots de passe correspondent en hachant leur entrée et en comparant les deux. Stockez l'entrée qu'ils ont utilisée comme un hachage dans une session ou un cookie, et vérifiez-la par rapport au mot de passe dans la base de données. –

+0

Vos deux réponses sont de mauvaises pratiques. Vous devez stocker l'ID de session PHP, l'adresse IP, l'identité du navigateur et la vérification de leur authentification. Ensuite, utilisez toutes ces informations pour approuver que l'utilisateur est valide. – Petah

1

Utilisez un système d'authentification prédéfini. C'est votre meilleur pari d'être en sécurité parce qu'ils auraient (ou auraient dû) penser à tout (problème de sécurité) déjà.

0

Ce que je fais est,

  1. journaux Vérifiez utilisateur correctement
  2. Assigner une session pour nom d'utilisateur + userLOGGEDIN séance
  3. Lorsqu'une page est cliqué, mon système recherche la DB pour nom d'utilisateur + userLOGGEDIN si son vrai permet alors l'accès à la page, mais ce qu'il fait aussi, supprime l'enregistrement qu'il vient de chercher, et insère un nouvel enregistrement pour le nom d'utilisateur + userLOGGEDIN avec un autre MDASH HASH différent. Donc, j'espère que ce sera plus dur à craquer.
Questions connexes