IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Protéger son code contre les injections SQL passage en GET des données


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Septembre 2022
    Messages : 6
    Par défaut Protéger son code contre les injections SQL passage en GET des données
    Bonjour,

    Quelle est la meilleure façon de protéger mon code pour qu'on ne puisse pas ajouter un ' dans l'url avec passage des variables en get ?
    Je travaille en php5, pas de possibilité d'évoluer pour l'instant.

    Voici mon code mais ça ne fonctionne pas pour l'apostrophe :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    $ref = mysql_real_escape_string($_GET['ref']);
     
     
     
    if(!$_GET['ref'] && !$_POST['ref']){
    $ref="1";
    }
    else
    {
    if (empty($_GET['ref'])){$ref=$_POST['ref'];}else{$ref=$_GET['ref'];}
    }
     
    $sql = "select * from pp where prod='$ref' ";
    $resultat = mysql_query($sql,$conn)  or die('Erreur SQL !'.$sql_ref.'<br>'.mysql_error());
     
    if (!$resultat){
    $ref="1";
    $sql = "select * from categories where prod='$ref' ";
    $resultat = mysql_query($sql,$conn)  or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    }

    Merci !

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 694
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 694
    Par défaut
    la 1re chose à changer est de ne pas construire la requete avec la valeur récupérée mais d'utiliser une requête préparée :
    https://www.php.net/manual/fr/pdo.pr...statements.php

    il y a peut-être une 2e chose à modifier, c'est la façon dont vous récupérez la valeur. pour bien organiser son code il vaut mieux commencer par séparer les affichages et les actions suite à l'envoi d'un formulaire.
    donc dans le même fichier vous allez lire soit dans $_GET soit dans $_POST mais pas dans les 2 en même temps.

    de plus depuis php version 7, il y a une "opérateur de fusion null" qui permet de simplifier le test. par exemple si vous avez ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ref = "22"; // valeur par défaut
     
    if (!empty($_GET["ref"])) {
    	$ref = $_GET["ref"];
    }
    vous pouvez le simplifier comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ref = $_GET["ref"] ?? "22";
    https://www.php.net/manual/fr/langua...rison.coalesce

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Septembre 2022
    Messages : 6
    Par défaut
    Merci beaucoup pour votre réponse

    Je fais donc deux fichiers différents pour récupérer mais comment je peux me débarrasser de l'apostrophe que je n'arrive pas à empêcher de rajouter dans l'url ?
    Dans mon code, même si je rajoute mysql_real_escape_string pour empêcher l'ajout d'un apostrophe et l'affichage de l'erreur mysql sur mon site, ça ne fonctionne pas.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (empty($_GET['ref']))
    {
    	$ref=$_GET['ref'];
    	$ref = mysql_real_escape_string($ref);
    }
    Merci

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 694
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 694
    Par défaut
    vous me remerciez pour mon message alors que vous ne l'avez pas lu, on va avoir du mal à avancer comme ça.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Septembre 2022
    Messages : 6
    Par défaut
    Je ne peux pas utiliser PHP 7 et je récupère ma variable en GET, je n'ai pas de valeur fixe pour $ref.
    Je débute et je ne comprends pas forcément tout désolé. je souhaite protéger ma variable $ref

Discussions similaires

  1. Réponses: 21
    Dernier message: 21/02/2017, 14h24
  2. [MySQL] se protéger contre les injections sql
    Par keusty78 dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 23/09/2009, 15h01
  3. Prévention contre les injections SQL
    Par Community Management dans le forum ASP
    Réponses: 0
    Dernier message: 29/07/2008, 12h50
  4. Lutter contre les injections SQL
    Par EvilAngel dans le forum ASP
    Réponses: 4
    Dernier message: 15/06/2006, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo