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 :

[SQL] Protéger les requetes SQL d'injection comme du php, javascript, ect


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut [SQL] Protéger les requetes SQL d'injection comme du php, javascript, ect
    Bonjour,

    J'ai un formulaire avec un champ texte pouvant écrire beaucoup de ligne d'écriture. On peut notament par exemple écrire un script PHP dans le champs du genre

    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
    22
    23
    24
    25
    26
    27
    28
    <?php
     
    function NumTel($tel)
    {
        $ch = 10;                               // Numéro à 10 chiffres
        $tel = eregi_replace('[^0-9]',"",$tel); // supression sauf chiffres
        $tel = trim($tel);                      // suppression espaces avant et après
        if (strlen($tel) > $ch)
        {
            $d = strlen($tel) - $ch; // retrouve la position pour ne garder
                                     // que les $ch derniers
        }
        else
        {
            $d = 0;
        }
        $tel = substr($tel,$d,$ch); // récupération des $ch derniers chiffres
        $regex = '([0-9]{1,2})([0-9]{1,2})([0-9]{1,2})([0-9]{1,2})([0-9]{1,2})$';
        $newtel = eregi_replace($regex,
            '\\1-\\2-\\3-\\4-\\5',$tel); // mise en forme
        return $newtel; /* Exemple : 03-81-51-45-78  */
    }
     
    // Appel de la fonction:
     
    echo "Téléphone : ".NumTel($teldom);
     
    ?>

    le problème, lors de l'éxecution de ma requete j'ai un message d'erreur, car celui ci interprete le code PHP.

    Comment protéger toute ma requete d'un coup avec une fonction comme mysql_real_escape_string() par exemple.

    Voici la requete que j'aimerai protéger :

    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
    22
    23
    24
    25
    26
    // SQL : Ajout du nouveau inventaire_server
    	$sql = "INSERT INTO inventaire_server VALUES ( '', 
    	'" . strtoupper(presVar($_POST, 'inventaire_server_hostname')) . "',
    	'" . presVar($_POST, 'inventaire_server_ip') . "',
    	'" . strtoupper(presVar($_POST, 'inventaire_server_numero_serie')) . "',
    	'" . presVar($_POST, 'modele') . "',
    	'" . presVar($_POST, 'inventaire_server_id_os') . "',
    	'" . presVar($_POST, 'inventaire_server_type') . "',
    	'" . presVar($_POST, 'inventaire_server_mise_service') . "',
    	'" . presVar($_POST, 'inventaire_server_id_situation') . "',
    	'" . presVar($_POST, 'inventaire_server_date_reception') . "',
    	'" . presVar($_POST, 'inventaire_server_numero_reception') . "',
    	'" . presVar($_POST, 'inventaire_server_id_batiment') . "',
    	'" . presVar($_POST, 'inventaire_server_id_etage') . "',
    	'" . ucfirst(presVar($_POST, 'inventaire_server_commentaire_server')) . "',
    	'" . presVar($_POST, 'inventaire_server_id_contrat_maintenance') . "',
    	'" . presVar($_POST, 'inventaire_server_contrat_date_du') . "',
    	'" . presVar($_POST, 'inventaire_server_contrat_date_au') . "',
    	'" . ucfirst(presVar($_POST, 'inventaire_server_responsable_appli_prenom')) . "',
    	'" . NumTel(presVar($_POST, 'inventaire_server_responsable_appli_tel')) . "',
    	'" . strtoupper(presVar($_POST, 'inventaire_server_responsable_appli_nom')) . "',
    	'" . presVar($_POST, 'prenom') . "')";
    	//Sécuriter pour éviter les injection SQL
    	mysql_real_escape_string($sql);
    	//Execution de la requete
    	mysql_query($sql)or die(mysql_error());

    Merci d'avance

    Arnaud

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    mysql_real_escape_string( ) doit être utilisée sur chacun des éléments insérés dans la BdD et non pas sur la requête complète.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    tu peux utiliser intval() pour les entiers ou htmlentities() aussi pour les chaine de caractères .
    pour les <textarea> tu as un truc pas mal qui s'appel nl2br() qui te permet de faire les sauts de ligne direct sans avoir a ecrire <br/> mias attention ce n'est pas une sécurité juste un plus quoi

Discussions similaires

  1. [SQL] requete sql avec les dates
    Par berti dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/03/2008, 12h32
  2. Probleme basique concernant les requetes SQL sous BCB
    Par PhEnOmX dans le forum C++Builder
    Réponses: 8
    Dernier message: 29/02/2008, 16h06
  3. Connaitre les requetes SQL ayant echouées
    Par hubertc dans le forum ASP
    Réponses: 2
    Dernier message: 21/07/2006, 10h41
  4. Réponses: 1
    Dernier message: 14/04/2006, 11h02
  5. [MySQL] Encore un probleme de variables avec les requetes sql
    Par eown dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/04/2006, 11h01

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