Requête SQL pour le nom d'utilisateur et mot de passe retour
J'ai une base de données de noms d'utilisateur et mots de passe. J'ai besoin de créer un "mot de passe Oublié" fonction et de recherche de la table pour un nom d'utilisateur et de retour que le mot de passe utilisateur. Ensuite, je voudrais envoyer un mail pour me dire le nom et le mot de passe.
Voici mon code de travail pour l'interrogation de la base de données pour un utilisateur spécifique:
<?php
session_start();
include "config.php";
if($_POST['nameQuery']) {
$query = "SELECT * FROM myDatabase WHERE name = '" .$_POST['nameQuery']. "'";
$result = mysql_query($query);
if (mysql_num_rows($result) > 0) {
//User exists
echo '1';
} else {
mysql_query($query);
//User does not exist
echo '0';
}
}
?>
- Très joli, quelle est votre question?
- Watch out pour Bobby Tables.
- Je vois que tu as des conseils à votre question précédente (stackoverflow.com/questions/7054553/query-two-sql-entries) sur les injections SQL. Veuillez en tenir compte. Vous pouvez voir ici, que les gens se sentent très fortement à ce sujet, pour une bonne raison.
- +1 pour une plus grande visibilité dans l'espoir que vous serez en mesure d'obtenir plus étoffé réponses pour vous aider sur le plan de la sécurité.
Vous devez vous connecter pour publier un commentaire.
Première chose: vous voudrez vous assurer que vous n'obtiendrez pas
SQL-injected
par l'intermédiaire de votre connexion, que vous êtes littéralement l'injection de la saisie de l'utilisateur dans votre requête... gros no-no.Ce Swap:
...pour cela:
Jusqu'à la prochaine est ce que vous avez demandé: un moyen d'obtenir à la fois les utilisateurs nom d'utilisateur et mot de passe. Bien que je ne recommande pas que vous avez réellement stocker le mot de passe en clair pour tout le monde à vue, c'est une décision que vous avez à faire sur votre propre.
Cet extrait de code va faire l'acte:
Edit: Adding password recovery-functionality
Pour la récupération de mot de passe de fonctionnalités que vous avez demandées ci-dessous, vous pouvez essayer quelque chose comme ceci:
recover_password.php:
Remarque que je n'ai pas eu le temps de vraiment tester le code, mais je pense que cela fonctionnera parfaitement avec quelques ajustements mineurs. Oh, avant que j'oublie, vous aurez besoin d'ajouter le tableau suivant de la base de données:
Structure de Table pour table de
myRequests
Bonne chance!
NE PAS stocker les mots de passe de votre base de données. Texte en clair les mots de passe ne doivent jamais être stockées. Vous devez stocker une table de hachage des mots de passe pour éviter qu'ils soient utilisés sur d'autres sites. Voir La meilleure façon de stocker le mot de passe dans la base de données pour plus d'informations.
hash('SHA256', $str)
doit être au moins de hachage, on peut faire.Votre code n'est PAS sécurisé ! Votre
$_POST['nameQuery']
est une magnifique porte ouverte à L'Injection SQLLe minimum de sécurité est de s'échapper et de désinfecter toutes vos entrées
La règle d'or: ne faites jamais confiance aux données entrantes.
Wiki De La Communauté:
Ne le font pas. Parce que cela signifie que vous allez économiser récupérable mots de passe. Mieux envoyer une modification du mot de passe le lien à leurs e-mails qui donne accès à un mot de passe de réinitialisation de la page. De cette façon, le mot de passe n'est pas changé, jusqu'à ce qu'une réinitialisation du cycle est complété par quelqu'un ayant accès à cet email de l'utilisateur.
De cette façon, vous pouvez de manière appropriée de hachage des mots de passe et vérifier entrant les mots de passe contre un hachage seulement.
En outre, je recommande à la recherche en php AOP, parce que vous êtes en train de créer des requêtes sql qui sont succeptible d'injection sql.
J'ai quelques suggestions pour vous
bonne chance et amusez-vous
Tout tangentielle à votre question initiale, je tiens à souligner que le stockage de mots de passe en clair est une mauvaise idée. Vous devez les stocker haché versions du mot de passe dans la base de données. Vous pouvez ensuite hachage de la saisie de l'utilisateur et de le comparer à ce qui est dans la base de données pour la connexion.
Au lieu de cela, vous avez oublié le mot de passe doit créer un nouveau(temporaire) d'un mot de passe, et de stocker la valeur de hachage de que les dans la base de données, tout en envoyant le texte en clair le mot de passe du compte de messagerie sur le fichier.
Viens de lire le résultat:
Sur un plan plus général: Vous avez une vulnérabilité d'injection SQL dans votre code, veuillez jeter un oeil dans cette rubrique, ou les attaquants seront en mesure de lire tous vos mots de passe utilisateur.
Aussi, il n'est pas conseillé de stocker le mot de passe en texte clair dans votre base de données. Veuillez utiliser un algorithme de hachage comme sha1 oder sha256 pour stocker les mots de passe.
Je vous recommande de changer votre conception de tableau de
Lors de la connexion de vérification de l'utilisateur contre le hachage de mot de passe, quelque chose comme cela
Quand loggin dans puis utilisez sql comme
select col1,col2,.. à partir de tbl where user=? et le mot de passe=? et puis, remplissez le paramètre $_POST['username'], $_POST['password']
donc utiliser Instruction Préparée ou PDO
utiliser la même logique lorsque l'utilisateur a oublié son mot de passe
Vous devez récupérer le nom d'utilisateur et le mot de passe de l'mysql_query résultat (stockées dans le
$result
variable) en tant que tel:Ensuite utiliser php mail() fonction pour envoyer l'e-mail.