2010-01-03 4 views
1
SELECT 
    SHA1(CONCAT(users.salt, '$password')) = users.password 
FROM users 
WHERE 
    users.username = '$username' 

Si $username existe cela retourne vrai, peu importe ce que le mot de passe mis en =/sql aide concat

iI veulent seulement pour revenir vrai si le nom d'utilisateur et le mot de passe est correct

Qu'est-ce que je veux est, je le veux pour prendre le sel et le mot de passe, le rehash avec sha1 et le comparer avec l'entrée de l'utilisateur

Qu'est-ce que je fais mal?

Répondre

2

Vous n'avez pas indiqué quelle base de données, mais je ne crois pas que vous puissiez coder une expression relationnelle dans une clause select comme vous l'avez fait. Essayez

SELECT username 
FROM users 
WHERE 
    users.username = '$username' and 
    SHA1(CONCAT(users.salt, '$password')) = users.password 

Si vous obtenez une ligne en arrière le mot de passe correspond; Si aucune ligne ne revient, le mot de passe ne correspond pas ou l'utilisateur n'existe pas.

0

Le contrôle de mot de passe doit être dans la clause where:

SELECT 
    'success' as Result 
FROM users 
WHERE 
    users.username = '$username' 
    AND SHA1(CONCAT(users.salt, '$password')) = users.password 

Cela devrait renvoyer une ligne avec une seule colonne si la vérification réussit; sinon, il renvoie un ensemble de lignes vide.

0
SELECT CAST(1 AS bit) 
FROM users 
WHERE 
    username = '$username' AND 
    SHA1(CONCAT(salt, '$password')) = password