Quand et pourquoi je devrais utiliser session regenerate id ()?

pourquoi et quand devrais-je utiliser la fonction session_regenerate_id() en php? Dois-je toujours l'utiliser après avoir utilisé le session_start() ? J'ai lu que je devais l'utiliser pour empêcher la fixation de la session, est-ce la seule raison?

74
demandé sur Mattia 2014-04-09 18:04:04

7 réponses

Qu'est-ce que session_regenerate_id() ?

comme le nom de la fonction le dit, c'est une fonction qui remplacera L'ID de session en cours par un nouveau, et conservera les informations de session en cours.

Que fait-il?

il aide principalement à prévenir les attaques de fixation de session. Les attaques de fixation de Session se produisent lorsqu'un utilisateur malveillant essaie d'exploiter la vulnérabilité d'un système pour fixer (définir) l'ID de session (SID) d'un autre utilisateur. Ce faisant, ils obtiendra un accès complet en tant qu'utilisateur original et sera en mesure de faire des tâches qui nécessiteraient autrement une authentification.

pour prévenir de telles attaques, assignez à l'utilisateur un nouveau numéro de session en utilisant session_regenerate_id() lorsqu'il signe avec succès (ou pour chaque requête X). Maintenant, il est le seul à avoir L'ID de session, et votre ancien ID de session (fixé) n'est plus valide.

Quand dois-je utiliser session_regenerate_id() ?

comme le souligne le symbole dans les commentaires ci-dessous, l'id de session doit être modifié lors de toute transition dans l'état d'authentification et seulement lors des transitions d'authentification.

autre lecture:

71
répondu Amal Murali 2016-01-28 12:04:40

Vous devez utiliser session_regenerate_id() pour arrêter détournement de session et fixation de session .

à Partir de cette Sécurité.SE répondre :

détournement de Session se réfère à voler le cookie de session. Cela peut être le plus facilement lors du partage d'un réseau local avec d'autres ordinateurs. E. g. chez Starbucks. Exemple... un utilisateur avec la session Y navigue sur le site de James site Web de Starbucks. J'écoute leur trafic sur le réseau, en train de siroter mon latte. Je prends utilisateur avec les cookies de la session Y pour le site Web de James et régler mon navigateur pour les utiliser. Maintenant, quand j'accède au site de James, le site de James.

à Partir de cette page", 151990920" :

Fixation de Session est une technique d'attaque qui force l'ID de session d'un utilisateur à une valeur explicite. En fonction de la fonctionnalité du Web cible site, un certain nombre de techniques peuvent être utilisées pour "corriger" la valeur de l'ID de session. Ces techniques vont des exploits de scripts sur plusieurs sites à l'empilage du site Web avec des requêtes HTTP faites précédemment. Une fois que l'ID de session d'un utilisateur a été corrigé, l'attaquant attend que cet utilisateur se connecte. Une fois que l'utilisateur le fait, l'attaquant utilise la valeur prédéfinie de l'ID de session pour assumer la même identité en ligne.

Quand Utiliser

lorsque l'utilisateur édite / met à jour certaines entrées importantes (modification des mots de passe, des justificatifs d'identité, des mots de passe oubliés, etc.)) qui peuvent compromettre la sécurité du site ou la Politique de confidentialité.

voir aussi:

guide de sécurité PHP: Sessions

Fixation de Session (Nice read)

20
répondu Dimag Kharab 2017-03-17 10:45:55

je pense que la question de l'empoisonnement de session a été assez bien couverte.

pour répondre à la question "Quand dois-je utiliser ceci?"partie, il est important de prendre du recul et de considérer ce que votre demande fait avec la session. Ou, pour le dire d'une autre façon, c'est la clé de la sécurité de question que vous devez répondre

si quelqu'un obtenait une prise de cette session que gagneraient-ils?

si vous ne faites que suivre sinon les données anonymes (l'utilisateur vient sur le site et vous l'utilisez pour suivre leurs visites) alors il ya peu de raison de régénérer une session. Un pirate de l'air ne gagnerait rien en prenant cette session.

beaucoup de sites offrent des logins, cependant. Une connexion change beaucoup de choses. Je peux accéder à mon profil. Je peux changer les paramètres. Ainsi, un pirate de l'air peut vouloir accéder à mon compte, surtout si les utilisateurs normaux et les utilisateurs admin utilisent tous des sessions pour gérer le login. Donc quand les gens viennent sur mon site et connectez-vous je régénère la session. Il ajoute une couche de sécurité supplémentaire que mon nouvel utilisateur connecté est moins susceptibles d'obtenir détourné.

chaque fois que nous ajoutons des données critiques à une session, vous devriez envisager de régénérer l'ID de session. Si vous avez besoin de durcir votre application contre la fixation, alors une régénération au hasard peut être utile, mais je ne me régénérerai jamais sur chaque requête. Par défaut, PHP stocke les sessions dans des fichiers sur le disque local. Vous ajoutez beaucoup d'entrées/sorties de disque pour atténuer ce qui est relativement faible vecteur d'attaque. Si vous avez vraiment besoin de plus de sécurité, je préconiserais d'utiliser des HTTPS complets plutôt que régénérés sur une base régulière (HTTPS rend la fixation très difficile à enlever).

15
répondu Machavity 2015-12-08 19:56:51

Pourquoi devrais-je utiliser session_regenerate_id ?

vous devez l'utiliser pour prévenir fixation de session .

Quand dois-je utiliser session_regenerate_id ?

chaque fois que l'état d'authentification change, c'est principalement sur login et logout.

exemple

Bob s'assoit à un ordinateur public et en parcourant stackoverflow.com il ouvre une nouvelle session là-bas. L'ID de session est sauvegardé dans un cookie (avec le drapeau httpOnly pour empêcher l'accès par javascript). Imaginons que le débordement de la pile ait toujours activé HTTPS et aussi le drapeau secure pour le cookie.

Comment Pouvons-nous voler la session maintenant?

Bob note L'ID de session. Il quitte l'ordinateur sans fermer le navigateur. Maintenant Alice vient à cet ordinateur et voit le débordement de la pile est déjà chargé. Elle se connecte maintenant.

où utiliser session_regenerate_id . Si vous ne créez pas un nouvel ID de session ici pendant la connexion, Bob pourrait utiliser la session précédente qu'il avait écrite pour accéder à la session D'Alice et serait connecté en tant Qu'Alice maintenant.

11
répondu kelunik 2017-03-25 16:15:17

un cas d'utilisation simple:

// User visits a webshop
$shopcart = new Cart();

une session est lancée et une entrée est faite dans la base de données. Le shopcart de l'utilisateur est identifié par son ID de session.

// User orders items
$shopcart->add('123', 20);
$shopcart->add('124', 18);
$shopcart->add('127', 5);

pour chaque produit ajouté, un enregistrement est fait dans ma table shopcart. Également identifié par l'id de session.

// User saves cart in order to use it later
$shopcart->save();

l'Utilisateur a décidé de sauvegarder son panier. Il est maintenant attaché à son nom d'utilisateur.

// Regenerate session id for user to be able to make a new cart
session_regenerate_id();

le l'id de session est régénéré et l'utilisateur peut maintenant recommencer à créer un autre shopcart.

10
répondu Peter 2015-11-13 09:07:13

Vous pouvez l'utiliser pour une meilleure sécurité.

de cette façon, vous créez des id de session pour une utilisation unique.

disons que votre id de session utilisateur est = 3

un hacker vous a piraté et a obtenu leur ID de session. Donc le hacker peut utiliser ce cookie pour utiliser leur session.

si vous avez un code comme

session_start();
session_regenerate_id();

vous êtes en mesure de changer leur session à chaque fois qu'ils utilisent votre site.

maintenant hacker obtient sessionid = 3

mais vous avez changé de session après qu'il a utilisé que votre

utilisateur ont sessionid=4 // auth

hacker session=3 // null

mais il y a un petit point disons que vous utilisez la méthode regenerate et que votre client se connecte au site web et ferme le navigateur ou est inactif. Votre client a sessionid=4 et si hacker obtient des cookies à cette partie ils ont le même id de session.

comme expliqué ci-dessus de cette façon, vous pouvez protéger votre client de reniflement de données sur un chemin, mais encore son ne sera pas corriger cette question pour de bon.

mais son sera beaucoup plus sûr si vous utilisez SSL enc.

Désolé pour le mauvais anglais.

9
répondu Hasan Veli Soyalan 2015-11-11 14:40:58

session_regenerate_id (): ne peut pas régénérer l'id de session - session n'est pas actif 151930920"

if(session_status() == PHP_SESSION_ACTIVE)
{
    session_regenerate_id();
}
4
répondu Anton 2016-04-22 21:53:36