2010-07-26 5 views
1

J'ai une séance que j'ai donné aux utilisateurs qui a le mot de passe correspondant = mot de passe enregistré, comme un système de connexion simple:PHP secure Session Check?

// Checks Password and Username 
if ($pSys->checkPassword($AccountData['password'], $StoredData['password'])) { 
    $_SESSION['login'] = true; 
} 

La question est: est-ce assez sûr?

// put this on every header page that needs to be loggedin. 
function loginCheck(){ 
    if (empty($_SESSION['login'])) { 
     header('location:index.php'); 
     die(); 
    } 
} 

Y at-il une différence entre die() et exit()? Deuxièmement, certains disent que je devrais ajouter session_regenerate_id()? (Est-ce une surpêche?) De toute façon la vraie question est dite ci-dessus.

addon

*

J'ai lu PHP Session Security mais il semble qu'il ne correspond pas à mon problème ici (ce lien est juste au général).

Voici la méthode checkPassword()

function checkPassword($password, $storedpassword) { 
    if($password == $storedpassword){ 
     return true;    
    } 
} 
+1

'est-il une diffrence entre la matrice() vide()?' 'Comparaison die()' et 'vide()' n'a pas de sens. Cela dit, 'die' est équivalent à' exit'; –

+0

désolé je veux dire sortie :) ive modifier celui-là George, merci. –

+1

Je pensais autant. Si vous vérifiez la documentation de die, vous remarquerez qu'il pointe vers la sortie. http://php.net/manual/en/function.die.php –

Répondre

3

Répondre à la première partie: empty et die ne sont pas comparables:

  • empty est de vérifier si une variable n'existe pas ou a une valeur égale à false (voir aussi type comparison table).
  • die est un alias de exit et est utilisé pour annuler immédiatement l'exécution du script en cours avec un message facultatif.

maintenant à votre exemple d'authentification: Oui, vous devez utiliser session_regenerate_id pour générer une nouvelle session ID et révoquer l'ancien ID de session en définissant le paramètre optionnel pour session_regenerate_id true:

if (!sizeof($ErrorAccount)) { // Checks Password and Username 
    session_regenerate_id(true); 
    $_SESSION['login'] = true; 
} 

Le but de session_regenerate_id est d'éviter session fixation attaques. Cela ne sera pas nécessaire si le serveur ne permet que l'envoi des identifiants de session via des cookies, mais puisque PHP les autorise par défaut dans l'URL, il est fortement recommandé de régénérer l'identifiant.

+0

je veux dire mourir et sortir, ive il suffit de l'éditer, merci gumbo, vous êtes toujours bien sur les questions de réponse, donc en utilisant session_regenerate_id fait effet alors .. hmm est-ce juste assez? –

+1

S'il vous plaît expliquer le besoin de 'session_regenerate_id' Il serait très utile pour la réponse. –

+0

que diriez-vous de la fonction logincheck est-ce juste bon? pas besoin d'ajouter des choses? –

1

Puisque vous recherchez des réponses sur la sécurité, ne conservez pas le mot de passe stocké en texte brut. À tout le moins, saler et hacher vos mots de passe, puis stocker le hachage. Rehash et comparer les hachages, pas de texte brut.

1

Vous pouvez ajouter un jeton (hachage) au formulaire, puis valider le jeton pour vous assurer que le jeton soumis via le formulaire est toujours valide. Cela aide à prévenir les attaques CSRF. Vous pouvez également stocker l'adresse IP et le navigateur avec le jeton dans une base de données pour une validation supplémentaire, mais vous devez savoir que certains FAI modifient assez souvent l'adresse IP du client et peuvent entraîner une défaillance de la validation.

More Info