7
votes

Système de connexion (PHP) Cookies et sessions

Je veux faire un système de connexion à l'aide de cookies / sessions, mais je ne suis pas sûr de quelle sécurité et telle est comme avec eux.

avec des sessions, si "Login" est défini sur "Oui", puis-je faire confiance à cela? Les utilisateurs sont-ils capables de changer ce qu'il revient? Devrais-je simplement stocker le mot de passe crypté et vérifier à chaque page?

Avec des cookies, devrais-je vérifier des choses comme des injections MySQL?

Cela pourrait sembler comme des trucs débutants, mais cela aiderait vraiment si quelqu'un pouvait la clarifier pour moi. Merci d'avance pour toutes les réponses!


0 commentaires

6 Réponses :


7
votes

Si vous définissez une variable de session, l'utilisateur ne peut pas le modifier directement à moins qu'ils ne soient pas hujack d'un autre cookie de session.

Ce que vous devez principalement surveiller est sur l'hébergement partagé, vos données de session ne sont pas sécurisées (généralement d'autres sites peuvent le voir).

Il convient également de noter que les données de cookie ne sont pas sécurisées non plus. Il ne devrait pas être invoqué de la même manière que les données de formulaire ne doivent pas être invoquées (peu importe la validation de la clientèle de la cliente).

Vos meilleures pratiques avec mots de passe sont les suivantes:

  1. Stockez le mot de passe dans la base de données dans une forme hachée, de préférence SHA1 (premier choix) ou MD5 (deuxième choix);
  2. Lorsque vous recevez le mot de passe de l'utilisateur, cryptez-le et vérifiez-le contre ce qui est stocké dans la base de données;
  3. Définissez le nom d'utilisateur connecté dans la session d'utilisateur;
  4. expire le cookie après une certaine période (même si ses jours) plutôt que de le faire durer éternellement; et
  5. Utilisez une connexion sécurisée (HTTPS NON HTTP) dans la mesure du possible. Les certificats SSL sont bon marché.

4 commentaires

Cela signifie-t-il que je devrais vérifier la connexion et le mot de passe de l'utilisateur sur chaque page chargée? Et comment la meilleure façon de conserver la base de données de mot de passe et la méthode de cryptage est-elle sécurisée?


@Grue non juste quand ils se connectent mais vous avez besoin d'une politique d'invalidation sensible. Différents IPS, une durée donnée de temps, une longueur d'inactivité donnée, etc. Quel que soit le sens de ce que vous protégeez (par exemple, un site Web bancaire a des considérations de sécurité différentes à une autre où vous laissez simplement des commentaires sur des vidéos).


Certaines choses assez obsolètes dans cette réponse. N'utilisez pas SHA1 ou MD5 pour les mots de passe: Stackoverflow.com/Questtions/1581610/...


Voir aussi cette réponse sur Security Stackexchange: sécurité.stackexchange.com/a/31588/20574



3
votes

règle de base: ne faites pas confiance à l'utilisateur de l'utilisateur. Les cookies sont des entrées de l'utilisateur, les identifiants de session stockés dans des cookies sont les entrées de l'utilisateur, les en-têtes HTTP sont des entrées utilisateur - ces choses doivent être vérifiées pour toutes les choses possibles. Les données de session, d'autre part, sont stockées sur votre serveur, de sorte qu'il est plus ou moins sécurisé s'il n'est pas stocké dans / TMP.

L'une des configurations les plus populaires pour l'autorisation de session est la suivante: ID: la session ID est stockée dans Cookie et tout le reste, y compris le mot de passe est stocké en session. Après avoir démarré une session basée sur ID d'un cookie, vous devez obtenir l'ID utilisateur des données de session, puis vérifier si le mot de passe stocké est toujours valide.


0 commentaires

0
votes

Toutes les saisies de l'utilisateur doivent être examinées et désinfectées religieusement, que ce soit pour obtenir et poster des données, des données de cookie ..

Pour répondre à votre question si le stockage de l'état de connexion dans une session var est en sécurité, la réponse est oui. N'oubliez pas de désinfecter tout ce que l'utilisateur vous envoie, peu importe la sécurité qu'il est censé être.


0 commentaires

0
votes

Ce système de connexion est un excellent à apprendre de.


0 commentaires

5
votes

Comme plusieurs personnes ici ont déclaré, ne faites pas confiance à l'utilisateur de l'utilisateur - jamais. En assainissant votre entrée, en particulier les champs de nom d'utilisateur et de mot de passe, vous aidez à éloigner les attaques d'injection SQL.

Pour tout ce qui est bon et saint ne stocke pas de noms d'utilisateur ou de mots de passe dans des cookies, ils sont renvoyés au serveur sur chaque demande et que toute personne qui regardait le flux peut arracher ces données ... alors vous êtes dans gros problème.

Voici quelques articles que vous devriez lire sur des sessions, la sécurité et le hachage - il suffit de hadrez vos mots de passe à SHA1 ou à MD5 ne suffisent pas, sel ils sont donc encore plus robustes. Il n'y a pas de sécurité impénétrable - même si vous faites tout ce que quelqu'un peut le casser - c'est inévitable. Votre travail consiste à rendre les choses aussi difficiles à casser / à exploiter le plus possible.

Le plus de travail impliqué dans la rupture de votre site, plus votre contenu doit être précieux pour valoir l'effort. Votre travail consiste à décourager les utilisateurs malveillants.

Cet article a de bonnes informations sur la création d'empreintes digitales uniques pour vos visiteurs, aide à faire du détournement de la session plus difficile - Guide de sécurité PHP: sessions

Cet article traite des techniques de base de base et de salage de mot de passe - Datain de mot de passe < / p>

Ce n'est en aucun cas une extrémité de tous et soyez tout - vous pouvez faire une carrière en matière de sécurité et autres, mais ils sont un bon point de départ. Quelqu'un ici peut probablement indiquer des articles plus efficaces / plus avancés, mais j'ai personnellement trouvé ces informations utiles dans la diffusion de mon code.


0 commentaires

2
votes

Une bonne pratique à utiliser est d'avoir 3 variables stockées. Un pour s'ils sont connectés, un pour leur nom d'utilisateur et un pour un hachage généré au hasard (généré lorsqu'ils se connectent et stockés dans une base de données avec l'autre information utilisateur). De cette façon, s'ils changent de nom d'utilisateur qui peuvent être stockés dans leurs cookies, il ne correspondra pas à celui qui a été généré pour cet utilisateur lorsqu'il est connecté.

Exemple: Les données de cookie pourraient être: enregistré_in = true; User = 'admin'; SessionID = [ID généré aléatoire (I Habituellement, MD5 Un mot généré aléatoirement que je crée)]] p>

chaque fois qu'ils se connectent, une nouvelle sessionId est générée et stockée dans la base de données dans son propre champ. Maintenant, si je devais changer mes informations de cookie et modifier la variable utilisateur pour dire «utilisateur» (ce qui serait un autre utilisateur, ils essaient d'essayer de Hi-Jack). La sessionID ne correspondrait plus à celle du second utilisateur et de la connexion serait refusée. P>

Voici un exemple rapide J'ai volé à partir d'un projet CI que j'ai travaillé il y a quelques semaines: P >

    function logged(){
$logged_in = $this->session->userdata('logged_in');
if($logged_in){
  $userid = $this->session->userdata('userid');
  $sessionhash = $this->session->userdata('hash');

  $this->db->where('id', $userid);
  $this->db->where('hash', $sessionhash);
  $query = $this->db->get('members');

  if($query->num_rows == 1){
    return TRUE;
  }else{
    return FALSE;
  }
}
}


0 commentaires