J'ai numérisé mon script de connexion en utilisant SQL injecte-moi strong> Firefox Addon
En fonction des résultats du test, mon script était vulnérable à l'injection SQL. Résultat par exemple p> mon script p> check-login.php - Pour vérifier les détails de la connexion et voici le code. P>
$ email = propre ($ _ post ["nom d'utilisateur ']);
$ passe = propre ($ _ post ["mot de passe"]);
$ utilisateur = "Sélectionnez * à partir de tbl_admin où admin = '$ email' et passe = '$ passer'"; p>
// Quelque code p>
$ _ session ['login_mes'] = "Vous avez connecté avec succès!";
tête ("Emplacement: admin.php");
sortie (); p>
} else { p>
_ session ['login_mes'] = "Adresse électronique invalide ou mot de passe, veuillez réessayer.";
tête ("Emplacement: login.php");
sortir();
} p> li>
ol> Les problèmes sont venus lorsque la connexion a échoué. Si je retirais le P>
} else {
$_SESSION['login_mes'] = "Invalid email address or password, please try again.";
header("Location:login.php");
exit();
}
4 Réponses :
302 est la manière du serveur de dire "Je veux que vous alliez à [ailleurs]" (dans ce cas, login.php). Ce n'est pas une erreur mais une réponse parfaitement normale. Surtout dans votre cas, il fait beaucoup plus de sens (si vous me demandez) d'envoyer à l'utilisateur une page de connexion après une tentative d'injection SQL que de le laisser entrer. P>
"// Certains code" ne vous aide pas beaucoup, mais le problème peut être avec ce Edit: Comme indiqué ci-dessus, le code 302 signifie "Vous êtes transféré". Ça ne signifie pas que l'injection SQL était de succès, car cela ne signifie pas que ce n'était pas non plus. Dans ce cas, vous ne saurez que si vous pouvez déterminer où ce 302 vous transfère, à "admin.php" ou "login.php". P> propre () code>. Essayez
mysql_real_escape_string () code> < / a> à la place. P>
la fonction propre fonctionne bien. Le problème est venu après} else {
Nous savons aussi que cela n'a pas été réussi et que la redirection était de se connecter.php (parce qu'il est quand il supprime cet en-tête ("" Emplacement: ... ") Le 302 n'est plus détecté. Avoir un 302 comme indication de Une injection SQL réussie est une idée plutôt bushedaad IMHO, je me demande ce qu'ils pensaient.
Certains outils de test de pénétration préfèrent les serveurs ne renvoient aucun message d'erreur ni des messages au moins très génériques. Par exemple, sur la page Injecte de SQL, la page dit
L'outil fonctionne en envoyant des chaînes d'échappement de la base de données via le formulaire des champs. Il cherche ensuite des messages d'erreur de base de données qui sont sortis dans Le HTML rendu de la page. P> BlockQuote>
Alors peut-être quand il voit le code de réponse 302, il suppose que votre application renvoie trop d'informations. Vous pouvez tester cette théorie en définissant un code d'état différent de votre réponse et en voyant si SQL injecte moi donne toujours une erreur, comme: P>
header('HTTP/1.1 404 Not Found');
Quatre ans plus tard, mais je me penche simplement sur cette question et je pensais que je partagerais pour la prochaine personne. p>
Après une analyse, nous avons conclu que le 302 n'est pas une préoccupation. La préoccupation est la page précédée du 302 qui aurait pu être envoyée mais a été balayée par le 302 avant de pouvoir être affichée. Si la page précédente reçue par le navigateur (et peut-être enregistrée par Fiddler) contenait des erreurs de base de données (ou d'autres informations pouvant trouver un pirate informatique utile) que cela est mauvais. Si le 302 est la réponse initiale et il a un corps vide, juste une en-tête, puis je pense que vous allez bien. p>
Vous devez afficher la page d'erreur (le but du 302), donc je ne vois donc pas comment cela pourrait être considéré comme «trop d'informations». P>
Oui. Sur mon site, le 302 a redirigé vers une page d'erreur indiquant le message d'erreur. Il fallait des informations qui fuient dans le sens où la déclaration TSQL a été révélée, mais ne semblait pas exposer mon site à l'injection.
Que fait la fonction
propre code>?
Sorte de question secondaire - existe-t-il un concept de requêtes paramétrées dans PHP? Cela pourrait être intéressant de regarder.