La création d'un système de connexion en PHP
Quelqu'un peut-il m'aider? Mon nom d'utilisateur est Blimeo et mon mot de passe "mot de passe", mais quand je mets mes identifiants, il me dit "Accès refusé" comme je l'ai dit. Je suis sûr à 100% que j'ai configuré ma base de données mySQL correctement.
<html>
<body>
<?php
echo sha1('Blimeo');
if (isset($_REQUEST['attempt'])) {
$link = mysql_connect('localhost', 'root', 'password') or die('Could not connect to database');
$user = mysql_real_escape_string($_POST['user']);
$password = sha1(mysql_real_escape_string($_POST['password']));
mysql_select_db('test_users');
$query = mysql_query(
"SELECT user
FROM users
WHERE user = '$user'
AND password = '$password'
") or die(mysql_error());
mysql_fetch_array($query);
$total = mysql_num_rows($query);
if ($total > 0) {
session_start();
$_SESSION['user'] = 'blah';
header('location: dashboard.php');
}
else {
echo '<br>Access denied!';
}
}
?>
<form method="post" action="login.php?attempt">
Enter your username:<input type="text" name="user"/><br/>
Enter your password:<input type="password" name="password"/><br/>
<input type="submit"/>
</form>
</body>
</html>
Bienvenue à Débordement de Pile! S'il vous plaît, n'utilisez pas
Juste un heads-up, mysql est obsolète. mysqli est une meilleure option.
pourquoi est-il
Ajouter une gestion d'erreur / d'établissement de rapports à l'
mysql_*
fonctions pour le nouveau code. Il n'est plus maintenu et que la communauté a commencé la dépréciation du processus. Voir le boîte rouge? Au lieu de cela, vous devriez en apprendre davantage sur les instructions préparées soit PDO ou MySQLi. Si vous ne pouvez pas décider, cet article l'aider à choisir. Si vous tenez à le savoir, ici est la bonne AOP tutoriel.Juste un heads-up, mysql est obsolète. mysqli est une meilleure option.
pourquoi est-il
echo sha1('Blimeo');
au début? J'ai eu le sentiment que tu voulais echo sha1('password');
Ajouter une gestion d'erreur / d'établissement de rapports à l'
mysql
appels (qui vous ne devriez pas utiliser, voir @Vérité du commentaire) et retirer le mysql_real_escape_string
à partir du mot de passe, qui ne sont pas nécessaires et il pourrait gâcher les mots de passe contenant des caractères obtenir échappé par mysql_real_escape_string
.OriginalL'auteur Blimeo | 2012-07-03
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR, 2016
Veuillez uniquement utiliser les systèmes d'accès, qui sont fournis à l'extérieur de la boîte dans presque tous les framework PHP! Il n'y a absolument aucune raison d'écrire cela par vous-même, comme l'authentification de l'utilisateur est un sujet majeur, et cela va prendre des mois (des années) pour écrire un sérieux, stable et moderne de connexion de la solution.
TEXTE ORIGINAL, À PARTIR DE 2012:
Que les systèmes d'accès sont un problème de sécurité et tout le monde fait les mêmes erreurs, encore et encore, je peux clairement dire:
Prendre un professionnel de script et de travail à travers le code pour comprendre ce qui se passe, ce que le hachage et le salage est et quels sont les problèmes session peut avoir.
[supprimé outdating lien]
Voici trois projets que pourrait être ce dont vous avez besoin:
https://github.com/panique/php-login-one-file
https://github.com/panique/php-login-minimal
https://github.com/panique/huge
Le lien a expiré
OriginalL'auteur Sliq
Tout d'abord, vous devriez commencer votre session sur la première ligne de la page.
Vous devriez ainsi mettre à jour votre code pour utiliser PDO plutôt les instructions de fonctions mysql. Ces sont plus lents et mysqli le ventre.
Ensuite, vous devez vérifier si le nombre de lignes renvoyées est égal à 1 et pas plus grand que 0. Ce serait une question de sécurité, comme votre script peut être manipulé pour le retour de plus de 1 ligne, puis les valider et entrer dans la zone sécurisée.
Le problème me semble, que, de votre mot de passe ne correspond pas à la db. echo le sha1 de votre mot de passe et de voir si elle correspond à la table.
OriginalL'auteur João Dias
Il semble que lorsque le script est en rupture, c'est quand il teste pour la mysql_num_rows().
Juste avant:
Peut-être essayer d'ajouter la ligne suivante pour tester et assurez-vous que $total est en effet > 0:
Autre que cela, essayez de tester la requête mysql pour vérifier de retour au moins 1 ligne à partir de la DB.
OriginalL'auteur Stegrex
OriginalL'auteur Fahad Manzoor