Comment corriger l'État du Serveur de Code: 302 Found par SQL Inject Me Addon Firefox
J'ai scanné mon script de connexion à l'aide de SQL Inject Me Firefox addon
Selon les Résultats du Test, mon script était vulnérable à une Injection SQL. Résultat par exemple
Results:
Server Status Code: 302 Found
Tested value: 1' OR '1'='1
Server Status Code: 302 Found
Tested value: 1' OR '1'='1
Server Status Code: 302 Found
Tested value: 1 UNI/**/ON SELECT ALL FROM WHERE
Server Status Code: 302 Found
Tested value: %31%27%20%4F%52%20%27%31%27%3D%27%31
Mon script
- login.php - formulaire de Connexion
-
check-login.php - Pour vérifier la connexion de détail et voici le code.
$email = clean($_POST['username']);
$pass = clean($_POST['password']);
$user = "select * from tbl_admin où admin='$email', et pass='$pass'";//code
$_SESSION['login_mes'] = "Vous êtes connecté avec succès !";
l'en-tête("Location:admin.php");
exit();} else {
$_SESSION['login_mes'] = "adresse email Invalide ou le mot de passe, veuillez essayer à nouveau.";
l'en-tête("Location:login.php");
exit();
}
Les problèmes sont survenus lors de la connexion a échoué. Si je supprime le
} else {
$_SESSION['login_mes'] = "Invalid email address or password, please try again.";
header("Location:login.php");
exit();
}
Pas de détecter les défaillances par SQL Inject Me et comment corriger cette partie?
- Ce qui ne l'
clean
est la fonction? - désinfecter la saisie de l'utilisateur
- Une sorte de côté la question - Est-il un concept de requêtes paramétrées en PHP? Il pourrait être intéressant de regarder dans.
Vous devez vous connecter pour publier un commentaire.
302 est le serveur de la façon de dire "je veux que vous alliez à [ailleurs]" (dans ce cas login.php).
Ce n'est pas une erreur, mais tout à fait normal de la réponse. Surtout dans votre cas, il fait beaucoup plus de sens (si vous me demandez) pour envoyer l'utilisateur vers une page de connexion après une injection SQL tentative que de le laisser dans.
Quatre ans plus tard, mais je viens de regarder dans cette question, et pensais que je voudrais partager pour la prochaine personne.
Après quelques analyses, nous avons conclu que le 302 est en soi pas un sujet de préoccupation. Le souci est que la page a précédé la 302, qui pourraient avoir été envoyée, mais a été emporté par les 302 avant qu'il puisse être affiché. Si la page précédente reçu par le navigateur (et peut-être enregistré par Fiddler) contenaient des erreurs de base de données (ou d'autres informations qu'un pirate pourrait trouver utile) que c'est mauvais. Si le 302 est la réponse initiale et il a un corps est vide, juste un en-tête, puis je pense que vous êtes OK.
Vous avez pour afficher la page d'erreur (le but de l'302) donc je ne vois pas comment cela pourrait être considéré comme "trop d'informations".
"//code" ne l'aide pas beaucoup, mais le problème peut être avec cette
clean()
. Essayezmysql_real_escape_string()
à la place.Edit: Comme dit ci-dessus, 302 code signifie "vous sont transmis". Il se complique pas dire que l'Injection SQL était prospère, car il ne veut pas dire qu'il n'était pas non plus. Dans ce cas, vous ne savez que si vous pouvez déterminer où cette 302 est de transmettre, à "admin.php" ou "login.php".
Certains tests de pénétration des outils préfèrent les serveurs de retour pas de messages d'erreur ou au moins très génériques. Par exemple, sur le SQL Inject Me page il est dit
Alors peut-être que lorsqu'il voit le 302 code de réponse, il suppose que votre application est de retour trop d'informations. Vous pouvez tester cette théorie, la définition d'un autre code de statut pour votre réponse et de voir si SQL Inject Me donne toujours une erreur, comme:
Bien sûr, de les envoyer sur une page 404 n'est pas aider vos utilisateurs à trouver leur chemin de retour à la page de connexion, de sorte que vous pourriez avoir à expérimenter avec d'autres 3XX messages, peut-être 303 et 307.