Espace membres

Bonjour Anonyme

Inscription

Email :
Mot de passe :

Mot de passe oublié ?

Nos scripts

MySpeach

MySpeach est un chat php sans base de donnée, rapide, léger et facile à prendre en main. DEMO

MyPHPUpload

MyPHPUpload est un script d'upload sécurisé écrit en PHP. DEMO

GrapAgenda

Agenda PHP et MySQL avec comptes utilisateurs et administration. DEMO

Livre PHP

Erreurs de requêtes MySQL en PHP

Cours / tutoriel écrit le 17-06-2010 par sky

Erreurs de requêtes MySQL en PHP
La configuration du serveur doit être avec les Magic_quotes=Off pour que cette exemple fonctionne.

Le problèmes de mettre des variables dans une requête MySQL c'est la posibilités de pouvoir exploiter une faille par injection. Par contre, si votre serveur a les magic_quotes à On, vous ne risquez pas grand chose, enfin, moins. (à voir dans php.ini)

Un exemple de reqête mysql pour une identification par login et mot de passe :
SELECT * FROM Table WHERE login='$login' AND password='$mdp'

Le formulaire pour être de ce genre :
Login :
<input name="mdp" id="mdp" type="text">
Mot de passe :
<input name="textfield2" type="text">


Le code qui récupèrera les données du formulaire :

<?php
$login = $_POST['login'];
$pass = $_POST['mdp'];
$req = "SELECT * FROM Table WHERE login='$login' AND password='$pass'";
?>


C'est un code que pas mal de débutants (plus haut aussi des fois :)) utilisent, bon, la suite ne marche pas sur tous les serveur, ça dépend de la configuration.
Aller maintenant sur la page du page formulaire et taper ceci :
Login : test1' or '1=1
Mot de passe : test2' or '1=1

Cliquer sur valider ...
et, surprise, vous est loguez !
Suffit ensuite de choisir mieux votre login pour tomber sur le compte de l'admin, ou root. ex :
Login : root' or '1=1
Mot de passe : test2' or '1=1


Explications
Voici à quoi ressemble votre requête avec les informations fourni par le formulaire :
$req="select * from Table where login='root' or '1=1' and password='test2' or '1=1'";

je pense que vous avez mainteannt compris. En utilisant le OR '1=1, on est sur de toujours avoir une réponse affirmative.

Si vous ne pouvez changer la configuration de votre serveur, il suffit d'utiliser la function addslashes() pour ajouter des slash devant tous les ' ou "...
Le code sécurisé :
<?php
$login = mysql_real_escape_string($_POST['login']);
$pass = mysql_real_escape_string($_POST['mdp']);
$req = "SELECT * FROM Table WHERE login='$login' AND password='$pass'";
?>


Qui vous donnera cette requête :
$req = "SELECT * FROM Table WHERE login='root' OR '1=1' AND password='test2' OR '1=1'";

Si vous pouvez changer la configuration, editer le fichier php.ini, chercher la ligne magic_quotes=Off, et mettez On à la place de Off.

Si vous rencontrez des erreurs, des chose que je dit complètement fausses, merci de me prévenir.
Si vous utilisez EasyPhp 1.7, php.ini est déjà configurer avec les magic_quotes à On, donc, pas de soucis à ce faire !

Commentaires

Darto le 20-07-2011

Tutoriel pourri

Pseudo
Email
Commentaire

Merci d'écrire le code ici :