2010-11-16 14 views
0

Je construis la partie connexion d'une application CodeIgniter en utilisant le simple login class comme point de départ. Tout fonctionne bien, mais je ne suis pas sûr des différences entre les types de cryptage et de ceux à utiliser.Connexion sécurisée PHP CodeIgniter

Je suis allé à l'aide de la crypte() avec le mot de passe de l'utilisateur sous forme de sel (via md5), comme ceci:

$pass == crypt($_POST['login_password'], md5($_POST['login_password']))

Cette méthode est ok, ou est-il une erreur flagrante dans cette approche? Cela semble sûr car ni le mot de passe ni le sel ne sont stockés dans la base de données. Ou est-ce un peu évident?

Merci d'avance.

+0

Vous aimeriez peut-être corriger votre lien;) –

Répondre

3

http://php.net/manual/en/faq.passwords.php

Ceci est la bonne façon de mettre en œuvre les mots de passe.

Tout ce qui est ci-dessous n'est pas pertinent.


Avec ce que vous avez là, un simple

$pass = md5($_POST['login_password'] . "somerandomchars"); 

suffisent dans la plupart des cas, à moins qu'un degré élevé de sécurité est nécessaire.

Si vous utilisez CodeIgniter, je vous suggère fortement de regarder dans le plugin d'authentification TankAuth.

+0

Hi @castis! Merci pour votre réponse. J'ai commencé avec un simple hachage MD5, mais était sous l'impression d'un sel devrait être utilisé pour empêcher l'utilisation de tables arc-en-ciel? Merci pour le lien, semble bon, je vais vérifier cela. – Robimp

+0

Oui, vous devriez certainement utiliser un sel pour sécuriser les mots de passe. Jetez un oeil à cette autre entrée SO. http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords – castis

+0

Ah ouais ça ressemble à un fil assez complet. Merci, coche verte sur le chemin ... – Robimp

1

Dans les applications modernes, le mot de passe du site Web n'est pas stocké à l'aide de crypt. Utiliser la valeur de hachage avec un sel est beaucoup plus sûr (si quelqu'un entre dans votre db, aucun mot de passe n'est là, seul le hash du mot de passe est utilisé pour se connecter) et crypt n'est vraiment pas très sécurisé. Malheureusement MD5 a aussi des problèmes, donc je suggère d'utiliser SHA512 comme un hachage.

3

Il y a aussi la bibliothèque de cryptage intégrée fournie par codeigniter. Vous fournissez le "sel" dans votre config (application/config/config.php) $ config [ 'de encryption_key']

Même si elle peut être "déchiffré", il est tout à fait sûr:

$this->load->library('encrypt'); 
//encryption 
$pass = $this->encrypt->encode($this->input->post('login_password')); 
+0

Que je ne savais pas, cela ressemble à une bonne option. – Robimp

+3

Le seul problème ici est que si vous êtes inquiet à propos de la sécurité, si quelqu'un va assez loin dans votre système pour obtenir des enregistrements de la base de données. Les chances sont qu'ils peuvent trouver une clé de chiffrement ainsi, à quel point: tous ces mots de passe sont facilement réversibles grâce à la bibliothèque de chiffrement de CI. Toujours hacher les mots de passe, ne jamais les chiffrer. – castis

+2

Crypter est inutile car il peut être décrypté. Md5 hashes au moins doivent être craqués, mais en utilisant un sel et peut-être même sha1 à la place rend les choses plus sûres. –

1

utilisez $pass = do_hash($this->input->post('password')); et incluez security_helper dans votre autoload.php