Injection sql

Résolu
audi68 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   -  
audi68 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   -
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. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    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.
    0
  2. audi68 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   9
     
    merci de ta reponse

    Mais je dois l utiliser ou et comment

    Merci de ton aide
    0
  3. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    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.'";
    0
  4. audi68 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   9
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    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()); 
    0
  7. audi68 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   9
     
    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
    0
    1. arthezius Messages postés 3756 Statut Membre 475
       
      Remplace tes mysql_escape_string() par mysql_real_escape_string()
      0
  8. Fecal-Matter Messages postés 1 Statut Membre
     
    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.
    0
    1. arthezius Messages postés 3756 Statut Membre 475
       
      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()
      0
  9. audi68 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   9
     
    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
    0
    1. arthezius Messages postés 3756 Statut Membre 475
       
      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()); 
      0
  10. audi68 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   9
     
    merci de ta reponse mais j avais aussi essaier

    voici l erreur

    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in

    Merci
    0
    1. arthezius Messages postés 3756 Statut Membre 475
       
      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());
      0
  11. audi68 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   9
     
    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
    0
    1. arthezius Messages postés 3756 Statut Membre 475
       
      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.
      0
  12. audi68 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   9
     
    Merci de ton aide

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

    Merci pour tous
    0
    1. arthezius Messages postés 3756 Statut Membre 475
       
      Pas de souci, c'est toujours un plaisir d'aider.
      0
  13. audi68 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   9
     
    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
    0