Sensible à la casse php de connexion à mysql
J'ai une authentification simple script qui fonctionne mais j'ai découvert que pour un utilisateur admin avec le mot de passe admin, l'utilisateur ADMIN avec le mot de passe ADMIN peuvent également se connecter. Comment puis-je faire ce script sensible à la casse. Aussi, je suis conscient de la enycriptions qui peut être fait de sorte que le mot de passe n'est pas stocké en texte, juste besoin de comprendre comment le rendre sensible à la casse.
if($_SERVER['REQUEST_METHOD'] == "POST" && mysql_real_escape_string($_POST['username'])!="" && mysql_real_escape_string($_POST['password']) !="") { //receive form sent via POST method
$username = mysql_real_escape_string($_POST['username']); //prevent sql injection by using "mysql_real_escape_string()"
$password = mysql_real_escape_string($_POST['password']);
$data = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'");
if(mysql_num_rows($data) >0) { //if the query returns a result then create session variables to show user is authenticated
$_SESSION['logged'] = 1;
$_SESSION['user'] = $username;
}
}
- Il y a soutien pour
mysql_*
fonctions, ils sont officiellement obsolète, n'est plus maintenu et se supprimé dans le futur. Vous devez mettre à jour votre code avec PDO ou MySQLi afin de s'assurer de la fonctionnalité de votre projet dans l'avenir.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le Type BINAIRE à la casse:
Il convient de noter que les fonctions mysql_ sont obsolètes. Vous devez passer à mysqli ou PDO et l'utilisation des requêtes préparées.
username
domaine sensible à la casse alors que le champ mot de passe n'est pas. Vous auriez besoin d'utiliserSELECT * FROM users WHERE BINARY username='$username' AND BINARY password='$password'
Sauf si il y a une raison de ne pas hacher le mot de passe (je crois que MD5 est toujours accepté bien que SHA-256 est de préférence). Les hachages de produire une couche de sécurité lors du passage de la circulation en raison de décodage doit être brute forcé. Il stocke également les majuscule et minuscule comme différents des hachages de sorte qu'il prend soin de la sensibilité à la casse de problème.
Si non, vous devez utiliser un compte de la casse de corrélation sur votre champ de mot de passe.
Tout d'abord, vous devriez vraiment hachage des mots de passe. Un changement dans la capitalisation va vous donner un hachage différent, de sorte que sortes le problème.
Si vous voulez comparer des noms d'utilisateur dans une affaire de sensibilité, vous avez probablement vous aussi souhaitez stocker et être en mesure de créer différents utilisateurs pour les connexions 'foo' et 'Foo'. C'est possible, mais vous avez besoin de changer la table de base de données. Plus spécifique, vous devez modifier le type de colonne pour le nom d'utilisateur de la colonne d'inclure un jeu de caractères et collation.
Vous devez définir le Classement de votre mot de passe champ à une valeur qui a une fin "cs" non "ci" comme
ci indique la casse et cs est sensible à la casse
Comparer le nom d'utilisateur et le mot de passe qui sont retournées par la requête à l'aide de PHP, qui est sensible à la casse.
Il suffit de changer la collecte de nom d'utilisateur et le mot de passe déposé à
latin1_general_cs
dans votre base de données.Ce programme, déterminer le nom d'utilisateur ou Email qui existe n'est pas validé. Ce code est au format JSON réponse du serveur. Pour pouvoir comparer la casse en utilisant OÙ BINAIRE dans la déclaration.
Avec PHP
password_hash()
fonction, la sensibilité à la casse de problème ne devrait pas venir comme il prend soin de cela.