2009-05-04 9 views
4

J'utilise actuellement le code suivant dans mes cm pour vérifier si visiteur est connecté en tant qu'administrateur pour qu'il puisse modifier la page en cours:Mauvaise gestion des variables de sessions PHP?

if($_SESSION['admin']=="1") 
{ 
     echo "<a href="foobar/?update">edit</a>"; 
} 

Mais je suis inquiet que le code est dangereux. Les variables $ _session ne peuvent-elles pas être facilement modifiées par l'utilisateur?

Qu'est-ce qui serait plus sécuritaire?

Répondre

4

Non, c'est un bon moyen de le faire. L'utilisateur ne peut pas modifier le $ _SESSION global, sauf s'il a accès à votre serveur. N'oubliez pas de rester à l'écart des cookies côté client.

Pour le rendre encore plus sûr, un bon moyen est de stocker l'adresse IP et de vérifier qu'elle reste la même entre chaque requête.

+0

Merci! La vérification de l'IP semble bonne; Je suppose que vous devriez stocker l'ip directement après session_start(), par exemple: session_start() $ _SESSION ["visitorIp"] = $ _SERVER ['REMOTE_ADDR']; Pas vrai? – AquinasTub

+4

La vérification de l'adresse IP est en fait une mauvaise idée - il existe de nombreuses organisations avec des proxies qui signifient qu'un utilisateur peut sembler avoir plusieurs adresses IP. Cela affectait également tous les utilisateurs d'AOL - pas sûr si c'est toujours le cas. – Greg

+0

@AquinasTub: Pas tout à fait. Vous ne vérifiez pas le visitorIp, juste l'écrivant. Cela devrait ressembler plus à si isset ($ _ SESSION ['username']) {/ * vérifie l'utilisateur ip */if ($ _SESSION ['visitorIp']! = $ _SERVER ['REMOTE_ADDR']) {session_unset(); header ("Emplacement:/login"); exit();}}/* Définit l'adresse IP de l'utilisateur */$ _SESSION ['visitorIp'] == $ _SERVER ['REMOTE_ADDR']; – phihag

0

Les variables de session doivent être suffisamment sûres une fois que votre codage est sécurisé.

Utilisez également la commande suivante à la place. Arrête les erreurs avec == Probablement devrait aussi utiliser true car il est beaucoup plus rapide que les comparaisons de chaînes.

if("1" === $_SESSION['admin']) 
1

$_SESSION Les variables ne peuvent pas être définies par l'utilisateur. Le code est donc parfaitement bien, bien que vous demandiez habituellement à votre utilisateur backend (généralement juste un utilisateur de la table, parfois LDAP) sur les privilèges de l'utilisateur actuel.

3

Le code est OK, vous montrez simplement un lien. Assurez-vous simplement que votre script UPDATE est également protégé.