Stockage des mots de passe avec sha1 et le sel
J'ai un simple script d'inscription réalisée en php et j'étais juste curieux de savoir si la façon dont je le fais c'est assez sécurisé pour stocker les mots de passe utilisateur. Je suis de la génération 32 bits aléatoires de sel et les ajouter à un sha1 mot de passe haché.
//create new validator object
$validator = new data_validation();
//validate user input
$firstName = $validator->validate_fname($firstName); //is the first name a string?
$lastName = $validator->validate_lname($lastName); //is the last name a string?
$username = $validator->validate_username($username); //is the username a string?
$email = $validator->validate_email($email); //is the email in valid format?
//make sure there isn't duplicate emails
$valQuery = $link->query("SELECT email FROM users WHERE email = '" .$email. "'");
if ($valQuery->num_rows == 1) {
echo "An email is already registered with that address";
return false;
}
//generate a random salt for converting passwords into sha1
$salt = $link->real_escape_string(bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)));
$saltedPW = $password . $salt;
$hashedPW = sha1($saltedPW);
mysqli_connect($db_host, $db_user, $db_pass) OR DIE (mysqli_error());
//select the db
mysqli_select_db ($link, $db_name) OR DIE ("Unable to select db".mysqli_error($db_name));
//our sql query
$sql = "INSERT INTO users (first_name, last_name, username, email, password, salt) VALUES ('$firstName', '$lastName', '$username', '$email', '$hashedPW', '$salt');";
//save the updated information to the database
$result = mysqli_query($link, $sql) or die("Error in Query: " . mysqli_error($link));
if (!mysqli_error($link))
{
$row = mysqli_fetch_assoc($result);
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['loggedin'] = TRUE;
header("Location: ../home");
}
Aussi, je suis en utilisant une combinaison de la procédure et de la programmation orientée objet en php. La plupart de cela est fait dans la procédure, mais il y a un peu de la programmation orientée objet classes telles que la validation de la classe utilisée dans le script ci-dessus. Cela peut-il poser des problèmes de performances à l'aide de deux styles?
quelle était la question?
double possible de Secure hash et du sel pour PHP les mots de passe
Pas un doublon. Je ne vois pas quoi que ce soit de semblable à mon script ou une question? Et je suppose que je suis juste en train de vous faire une opinion si ce script serait assez sécurisé pour stocker les mots de passe des utilisateurs à grande échelle?
Votre question est juste un cas particulier de celui -- de manière sûre de hachage des mots de passe en PHP. Les réponses à cette question s'applique à la vôtre (non, ta méthode n'est pas sécurisé).
C'est tout ce que vous aviez à dire. Pas besoin de m'accuser de poster une double question. Je vous remercie de votre réponse, mais juste parce que certaines questions sont posées de la même manière ne signifie pas qu'ils sont en double. La question que vous dirigé vers est plein d'informations utiles, mais il ne répond pas à ma question. Vous cependant, ne. Donc, je vous remercie.
double possible de Secure hash et du sel pour PHP les mots de passe
Pas un doublon. Je ne vois pas quoi que ce soit de semblable à mon script ou une question? Et je suppose que je suis juste en train de vous faire une opinion si ce script serait assez sécurisé pour stocker les mots de passe des utilisateurs à grande échelle?
Votre question est juste un cas particulier de celui -- de manière sûre de hachage des mots de passe en PHP. Les réponses à cette question s'applique à la vôtre (non, ta méthode n'est pas sécurisé).
C'est tout ce que vous aviez à dire. Pas besoin de m'accuser de poster une double question. Je vous remercie de votre réponse, mais juste parce que certaines questions sont posées de la même manière ne signifie pas qu'ils sont en double. La question que vous dirigé vers est plein d'informations utiles, mais il ne répond pas à ma question. Vous cependant, ne. Donc, je vous remercie.
OriginalL'auteur Ty Bailey | 2012-10-29
Vous devez vous connecter pour publier un commentaire.
Pas. Arrêtez ce que vous faites, lire De manière sûre de hachage des mots de passe, alors lisez la Secure hash et du sel pour les mots de passe en PHP:
Le plus important:
Voir cette réponse pour une comparaison de PBKDF2, bcrypt et scrypt.
Également vous reporter à la souvent lié à l'article Comment Stocker En Toute Sécurité D'Un Mot De Passe:
PHPass est probablement la meilleure façon de faire de bcrypt de hachage en PHP. Vous pouvez également le faire à la dure à l'aide de la la fonction crypt et
CRYPT_BLOWFISH
si vous voulez, mais sachez qu'il y a beaucoup de façons de se tromper, et l'interface est assez arcanes (comme la façon dont vous spécifiez des valeurs du sel).Il y a une bonne explication sur cette question que j'ai posée tout à l'heure. La version courte est qu'il y a ces trois grandes clés de la dérivation des fonctions: PKBDF2 utilise une variable quantité de temps processeur en vous permettant de peaufiner un nombre d'itérations de la fonction de hachage à exécuter, mais il est facile à mettre en œuvre dans le matériel (ce qui est mauvais). bcrypt fait aussi de temps processeur contrôlable, mais est relativement peu coûteuse à mettre en œuvre dans le matériel. scrypt a la variable de temps de PROCESSEUR et de mémoire, et la mémoire est vraiment cher dans les implémentations matérielles.
Aussi, PBKDF2 est un norme IETF, qui peut dans certaines situations (si vous êtes obligé de l'utiliser). Les deux PBKDF2 et bcrypt sont autour de 12 ans je pense, tout en scrypt est seulement il ya quelques années. En matière de sécurité, plus anciens est mieux (principalement parce que c'est la seule preuve que nous avons qu'une fonction n'est pas trivial à la pause). Il est également beaucoup plus facile de trouver des implémentations de PBKDF2 et bcrypt, car ils sont si vieux.
OriginalL'auteur Brendan Long
De commutation entre la procédure et de l'OO en elle-même n'affecte pas les performances. La surcharge de chargement et l'instanciation de classes est négligeable. Cependant, la gestion d'un non-OO base de code qui poussent peut être un non-négligeable de la tâche, surtout jongler tout dans l'espace de noms global.
L'ajout d'un champ supplémentaire à votre insert (le sel) n'affecte en rien. En utilisant le sel de ne pas ajouter de frais généraux pour l'algorithme sha1 par la clouant à la fin du mot de passe.
Je suis un peu confus sur la façon dont vous choisissez de générer de l'aléatoire de sel, mais il n'a pas l'air très en système intensif.
Non, sa fine pour générer et stocker (vous en aurez besoin pour décrypter), mais je trouve votre façon de faire pour être interestig.
OriginalL'auteur Ray