6
votes

Comment corriger le code d'état du serveur: 302 Trouvé par SQL Inject Me Firefox Addon

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> xxx pré>

mon script p>

  1. login.php - formulaire de connexion Li>
  2. 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();
    }
    


2 commentaires

Que fait la fonction propre ?


Sorte de question secondaire - existe-t-il un concept de requêtes paramétrées dans PHP? Cela pourrait être intéressant de regarder.


4 Réponses :


9
votes

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.


0 commentaires


0
votes

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');


0 commentaires

2
votes

Quatre ans plus tard, mais je me penche simplement sur cette question et je pensais que je partagerais pour la prochaine personne.

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.

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».


1 commentaires

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.