SQL injection

Répondre
anasha
le 15/02/2005 à 01:36
anasha
voila le code :
<?php
$sql = 'SELECT id FROM admin WHERE pseudo="'.$pseudo.'" AND pass="'.$hasch.'"';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$nombre = mysql_num_rows ($req);

if ($nombre == 0){
mysql_free_result($req);
mysql_close();
$erreur = "Pseudo ou mot de passe inconnu.";
}
elseif ($nombre == 1) {
mysql_free_result($req);
mysql_close();

$cookie = $pwd;
$expire=365*24*3600;
setcookie("MEMBRE","$cookie",time()+$expire,"/");
echo '<body onLoad="alert(\'Bienvenue '.ucfirst($pseudo).'\nVous pouvez à présent accéder à l\\\'interface d\\\'administration via le lien apparu en bas à droite\n\nN\\\'oubliez pas de vous déconnecter avant de fermer le site\')">';
redirection("http://81.57.242.24/CRIF/index.php");
exit;

}
?>

Voilà rien de plus...
Y te plait le site ???
Anasha [php-kiche-nomore]
Bzh
le 15/02/2005 à 01:50
Bzh
Tu devrais changer certaine chose:

<?php
//on lance les sessions
session_start();

//requètte maintenant protègé contre les injections
$sql = 'SELECT id FROM admin WHERE pseudo="'.mysql_escape_string($pseudo).'" AND pass="'.mysql_escape_string($hasch).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$nombre = mysql_num_rows ($req);

if ($nombre == 0){
mysql_free_result($req);
mysql_close();
$erreur = "Pseudo ou mot de passe inconnu.";
}
elseif ($nombre == 1) {
mysql_free_result($req);
mysql_close();

//Les cookies sont modifiables très dangereux
//$cookie = $pwd;
//$expire=365*24*3600;

$_SESSION['MEMBRE'] = $pwd;

//cookie à éviter pour les gestions de membres
//setcookie("MEMBRE","$cookie",time()+$expire,"/");
echo '<body onLoad="alert(\'Bienvenue '.ucfirst($pseudo).'\nVous pouvez à présent accéder à l\\\'interface d\\\'administration via le lien apparu en bas à droite\n\nN\\\'oubliez pas de vous déconnecter avant de fermer le site\')">';
redirection("http://81.57.242.24/CRIF/index.php");
exit;

}
?>


Il ne te reste plus qu' à tester la variable de session 'MEMBRE' dans ta page index.php

Voila en speed, comment j' aurais plustot procédé !!!

Bye...
Bzh
le 15/02/2005 à 01:52
Bzh
D' ailleur, dangereux d' avoir mis ton code de connexion comme ça ouvertement !!!! Il s' agit tt de même de ta connexion entant qu' admin !!!

Sérieusement à éviter !!!
anasha
le 15/02/2005 à 02:00
anasha
bof jpeu bien la changer o cas ou, sur lephpfacile c pas des méchants et puis les scripts viennent d'ici, alors tout le monde les coné deja...
Pour les sessions j'ai bien essayé de m'y interesser mais ca me gave (oué jsui un peu longue a trouver les choses bien : pendant plus d'1 an j'ai géré un site de 600 pages en html avant de passer au php smiley )
Enfin en tout cas j'ai bien essayé tous ce qu'ils disent dans l'article mais ca marche po sur ma requete... Tant mieux :)
Anasha [php-kiche-nomore]
Bzh
le 15/02/2005 à 02:12
Bzh
Heu !!!! Tout simplement parce que nous ne sommes pas de vrai hacker !!!!

Mais t' inkiètte pas qu' en laissant ton code comme ça, (sans protèger ta requètte) et bin il y rentre sans problème !!!! Les vrai !!! smiley

Et pour les sessions c' est vraiment très simple !!!

Quelques règles toute bête a respecter !!!

Le session_start() avant toute en tête et même le fameu:
<?php 
session_start();

//et bin marchera pas a cause des saut de ligne avant le <?php

?>


puis tu enregistre une variable comme ça : $_SESSION['variable'] = "contenue";

et tu récupère la valeur echo $_SESSION['variable'];

ET vérifier que le client accepte le cookie de session (mon gros problème en ce moment smiley)

Et c' est bon...smiley

smiley
anasha
le 15/02/2005 à 02:16
anasha
ouep mais justement j'ai lu ton post et moi je risque d'envoyer ce site sur free, alors ca me gaverai que ca marche po.

Sinon moi les sessions m'auraient intéressées si j'avais pu leur mettre un time out différent du phpinfo (par defaut 180 = 3 heures). Moi ce que j'aimerai c'est faire comme sur amazon par exemple où après 30 minute y te renvoient sur une page de login avec ton pseudo deja écrit.

Enfin bon c'est pas bien grave tout ca, de toute facon je compprendrai un jour (apres tout le monde mais c po grav !!)
Anasha [php-kiche-nomore]
Bzh
le 15/02/2005 à 11:15
Bzh
Mais écoute sa y a pas de problème...

Lorsque ta variable de session n' est plus déclaré tu renvoie a ta page de connexion

<?php
if(!isset($_SESSION['MEMBRE'])){header("Location: ./inscription.php");} ?>


Et voila, et pour la duré, il suffit de déclarer une autre variable de session ou tu enregistre l' heure à laquelle tu t' es connecté et ensuite tu la compare a l' heure actuel pour savoir combien de temps elle à été déclarer. Si > ou = alors dé connecté et effacer la session se qui te renverra forcément à ta page de login...

Voila, j' éspère avoir été claire... Très simple et exactement comme tu le souhaitais...

Bye... smiley
Bzh
le 15/02/2005 à 17:47
Bzh
J' ai potassé un peu ton code pour comprendre pkoi les injection d' SQL ne fonctionne pas....

Et bien tt simplement, tu étais un petit peu protègé vu que tu testes le nombre de résultat or normalement il ne doit avoir qu' un seul résultat alors qu' avec les injections de bases on retourne tous les résultats !!!!

Or, il suffit de rajouter a la fin un "LIMIT 1"...

Donc dangés !!!
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours