Injection sql

Résolu
Bonjour a tous,

Je ens d installer le logiciel havij surmon ordi car on me la conseiller pour tester mon site

Par contre je viens de me rendre compte que l on peut acceder a la base de donné de mon site

Que dois je faire pour bloquer l acces

J ai fait un autre site sur le meme principe que le 1er mais celui ci n a aucune faille

Meri de votre aide

12 réponses

  1. Voila je veins de modifier tous mes fichier j ai refait le test avec havij et je n est plus acces a ma base de donné niquel merci

    Maintenant j aimerais savoir si mon site est sur et si tu connais d autre logiciel d injection sql pour tester tous cela

    Merci de ton aide
    1. Merci de ton aide

      JE vais modifier toutes mes pages et je te tiens au courant

      Merci pour tous
      1. Pas de souci, c'est toujours un plaisir d'aider.
    2. merci de ta reponse effectivement maintenant ca fonctionne

      La nouvel ecriture que tu m as donner correspond a quoi php5?

      Pour la fermeture de la base de donne le mieu est exit() ou mysql_close();

      Merci pour ton aide
      1. Mon ecriture est simplement une autre manière d'écrire.
        On peu écrire par exemple:
        echo 'ok';

        ou
        echo "ok";


        Pour fermer la connexion il faut utiliser mysql_close();
        exit();
        va simplement arrêter un script.
        Exemple:
        echo 'start';
        exit();
        echo 'end';

        "end" ne sera pas écrit.
    3. merci de ta reponse mais j avais aussi essaier

      voici l erreur

      Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in

      Merci
      1. Après le in tu as le numéro de ligne.
        Quelle est la ligne correspondante?

        Si c'est celle avec la requête, je t'invite à la réécrire de la manière suivante:
        $requete1 = mysql_query('SELECT * FROM '.$table_name.' WHERE serie="'.mysql_real_escape_string($serie).'" ORDER BY '.$table_col.' ASC LIMIT '.$limite1.', '.$limite2.'') or die(mysql_error());
    4. Merci de votre reponse je viens de la changer et ca fonctionne

      Par contre je suis entrain de modifier mes autres formules et la ca coince

      actuel
      $requete1 = mysql_query("SELECT * FROM $table_name WHERE serie='$serie' ORDER BY $table_col ASC LIMIT ".$limite1.", ".$limite2."") or die(mysql_error());

      modification
      $requete1 = mysql_query("SELECT * FROM $table_name WHERE serie="'.mysql_real_escape_string('serie').'" ORDER BY $table_col ASC LIMIT ".$limite1.", ".$limite2."") or die(mysql_error());

      Par contre pour cette question vous ne m avez pas donne de reponse

      ncore une question pour fermer ma requete je dois utiliser
      exit();

      ou
      mysql_close();

      Merci de votre aide
      1. actuel
        $requete1 = mysql_query("SELECT * FROM $table_name WHERE serie='$serie' ORDER BY $table_col ASC LIMIT ".$limite1.", ".$limite2."") or die(mysql_error());


        modification
        $requete1 = mysql_query("SELECT * FROM $table_name WHERE serie="'.mysql_real_escape_string('serie').'" ORDER BY $table_col ASC LIMIT ".$limite1.", ".$limite2."") or die(mysql_error()); 


        Dans le premier cas tu utilises une variable ($serie) et pas dans le deuxième...
        Je dirai que c'est donc à modifier en:
        $requete1 = mysql_query("SELECT * FROM $table_name WHERE serie="'.mysql_real_escape_string($serie).'" ORDER BY $table_col ASC LIMIT ".$limite1.", ".$limite2."") or die(mysql_error()); 
    5. Pour se protéger, toute les données envoyés par l'utilisateur doivent être passées par mysql_escape_string(), et intval() si c'est des données numériques.
      1. mysql_escape_string(): Cette fonction est OBSOLETE depuis PHP 5.3.0. Nous vous encourageons vivement à ne plus l'utiliser.
        A remplacer donc par mysql_real_escape_string()
    6. OK merci effectivement c est plus clair comme ca

      On va faire plus simple je prends seulement sur 2 requete mais je ne vois pas ou utiliser ta variable "'.mysql_real_escape_string($_GET['where'].'"

      $sql = 'INSERT INTO vision (
      id,
      nom,
      ) VALUES(
      "",
      "'.mysql_escape_string($_POST['f_1']).'",
      "'.mysql_escape_string($_POST['f_2']).'",
      )';

      mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

      Encore une question pour fermer ma requete je dois utiliser
      exit();

      ou
      mysql_close();

      Merci beaucoup de ton aide
      1. Remplace tes mysql_escape_string() par mysql_real_escape_string()
    7. Comme tu l'as fait, c'est correct.
      Si tu veux alléger un peu tes requête, il faudra stocker le résultat de mysql_real_escape_string() dans des variables. Dans mon exemple, j'en avais qu'une seule : $where. Mais sur le tiens, tu auras besoin d'autant de variables que de mysql_real_escape_string().

      Pour rendre ton code plus clair, je te propose de faire comme ceci. C'est plus long mais ça facilite la lecture :
      $sql = 'INSERT INTO vision (
      	id,
      	nom,
      	serie,
      	batie,
      	adresse,
      	cp,
      	ville,
      	département,
      	tel,
      	portable,
      	demande,
      	m2,
      	caveradier,
      	decoré,
      	couvert,
      	terrain,
      	quand,
      	serie,
      	connu
      ) VALUES(
      	"",
      	"'.mysql_escape_string($_POST['f_1']).'",
      	"'.mysql_escape_string($_POST['f_2']).'",
      	"'.mysql_escape_string($_POST['f_3']).'",
      	"'.mysql_escape_string($_POST['f_15']).'",
      	"'.mysql_escape_string($_POST['f_16']).'",
      	"'.mysql_escape_string($_POST['f_17']).'",
      	"'.mysql_escape_string($_POST['f_4']).'",
      	"'.mysql_escape_string($_POST['f_5']).'",
      	"'.mysql_escape_string($_POST['f_18']).'",
      	"'.mysql_escape_string($_POST['f_6']).'",
      	"'.mysql_escape_string($_POST['f_7']).'",
      	"'.mysql_escape_string($_POST['f_8']).'",
      	"'.mysql_escape_string($_POST['f_9']).'",
      	"'.mysql_escape_string($_POST['f_10']).'",
      	"'.mysql_escape_string($_POST['f_11']).'",
      	"'.mysql_escape_string($_POST['f_12']).'",
      	"'.mysql_escape_string($_POST['f_13']).'",
      	"'. mysql_escape_string($_POST['f_14']).'"
      )'; 
      	
      mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
      1. Merci de ta reponse

        mais je ne vois pas trop comment tu utilise ton where

        sur mon exemple tu me conseil comment?

        $sql = 'INSERT INTO vision (id, nom, serie, batie, adresse, cp, ville, département, tel, portable, demande, m2, caveradier, decoré, couvert, terrain, quand, serie, connu) VALUES("", "'.mysql_escape_string($_POST['f_1']).'", "'.mysql_escape_string($_POST['f_2']).'", "'.mysql_escape_string($_POST['f_3']).'", "'.mysql_escape_string($_POST['f_15']).'", "'.mysql_escape_string($_POST['f_16']).'", "'.mysql_escape_string($_POST['f_17']).'", "'.mysql_escape_string($_POST['f_4']).'", "'.mysql_escape_string($_POST['f_5']).'", "'.mysql_escape_string($_POST['f_18']).'", "'.mysql_escape_string($_POST['f_6']).'", "'.mysql_escape_string($_POST['f_7']).'", "'.mysql_escape_string($_POST['f_8']).'", "'.mysql_escape_string($_POST['f_9']).'", "'.mysql_escape_string($_POST['f_10']).'", "'.mysql_escape_string($_POST['f_11']).'", "'.mysql_escape_string($_POST['f_12']).'", "'.mysql_escape_string($_POST['f_13']).'", "'.
        mysql_escape_string($_POST['f_14']).'" )';
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

        exit();

        Merci
        1. Par exemple :
          $sql = 'SELECT COUNT(*) AS nb FROM table WHERE column="'.mysql_real_escape_string($_GET['where'].'"';

          Ou :
          $where = mysql_real_escape_string($_GET['where']);
          $sql = 'SELECT COUNT(*) AS nb FROM table WHERE column="'.$where.'";
          1. merci de ta reponse

            Mais je dois l utiliser ou et comment

            Merci de ton aide
            1. Salut.
              Utilise mysql_real_escape_string pour sécuriser tes variables provenant de l'utilisateur (GET, POST et COOKIE principalement) avant d'effectuer les requêtes SQL.