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

Langage PHP Discussion :

[Sécurité] intval() ou mysql_real_escape_string() ?


Sujet :

Langage PHP

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut [Sécurité] intval() ou mysql_real_escape_string() ?
    Bonjour,

    Je reçois des données de type numérique depuis un formulaire et je viens de trouver la fonction intval(), qui converti les chaines de caractères en nombre si j'ai tout compris.

    Donc finalement, intval() ne serait-il pas préférable à mysql_real_escape_string() pour éviter que l'on me trafique ma requête ?

  2. #2
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    si je fais ça, c'est sauvage ou pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $var=htmlentities(mysql_real_escape_string(intval($var)));

  3. #3
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    intval() ne te permet que de convertir une variable en une valeur numérique entière, et n'est pas concue pour te proteger.

    mysql_real_escape_string() en revanche est une fonction destiné à la sécurité.

    Pour ce qui me concerne, j'ai pris l'habitude d'utiliser systématiquement mysql_real_escape_string() avant toute requete ou est envoyé des données par l'utilisateur, et j'utilise intval() en supplément de mysql_real_escape_string() si les valeurs sont censés être numériques.
    Votre nom de domaine dès 1,47€ ?
    www.avenuedot.com

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    hello,

    les deux ont pas grand chose a voir

    dans ton cas il serait peut etre plus intéressant de vérifier qu'on t'a bien envoyé des données numériques : is_numeric est pas mal pour ça.

    maintenant si tu veux exclusivement des entiers tu peux passer par ça :

    intval( $mavar ) == $mavar

    qui permet de passer le probleme du au fait que les données POST ou GET sont considérées comme des chaines et qui du coup échouent au test is_int();

    mysql_real_escape_string est faite pour échapper les chaines de caractères qui pourraient fausser tes requetes. c'est pas tout à fait pareil
    Pourfendeur de singletons en croisade

  5. #5
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Bah en fait je veux que la variable de la requête utilise des chiffres, ce qui est le cas si elle n'a pas été trafiquée. Donc normalement si j'utilise intval, elle va me convertir la variable en chiffre, donc ne rien faire si c'est déjà un chiffre, sinon elle va me sortir un zéro, ce qui n'est pas en soit un problème. Donc normalement c'est sécurisé avec intval(), non ?

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Ceci est complètement absurde (passe-moi l'expression) :
    $var=htmlentities(mysql_real_escape_string(intval($var)));
    D'une part, intval() te permet d'obtenir une valeur numérique entière, ce qui empêche de manière très effective toute tentative d'injection SQL. Essaie de faire une injection en n'utilisant que des entiers et appelle-moi si tu y parviens
    D'autre part, va trouver un caractère à encodage particulier qui nécessite mysql_real_escape_string() si tu attends un entier...
    Enfin, et ce sujet a été traité maintes fois sur ce forum, htmlentities() n'est pas prévu pour stocker en base de données mais pour envoyer un flux HTML au client. De plus, les entiers n'ont pas d'entités HTML.

    Bref, il est absurde de convertir un entier car c'est la donnée la plus sécurisée que tu puisses obtenir.
    Pour envoyer dans une requête : utilise intval() tant que possible, sinon mysql_real_escape_string(), mais rien d'autre.
    Pour envoyer au navigateur : htmlentities() si ce n'est pas un nombre.

  7. #7
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    donc si je vais intval($var) c'est plus que suffisant dans la mesure où j'attend un chiffre dans ma requête et si je fais mysql_real_escape_string(intval($var)) c'est juste pour me rassurer ? Et si je tombe sur un warrior du piratage qui me sort un code à double action pour neutraliser intval() n'est-ce pas valable d'avoir encore un mysql_real_escape_string() sous la main ? Ou c'est de la superstition totale ?

  8. #8
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    il me semble que la réponse de Yogui est plus que clair et réponde suffisament à tes questions non ?
    Votre nom de domaine dès 1,47€ ?
    www.avenuedot.com

  9. #9
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Tu veux que je te réponde oui alors je vais te dire oui comme ça ça ira.

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Dans ce cas, échapper la variable ne sert qu'à perdre dutemps processeur et à rendre ton code moins portable. Donc à rien.

  11. #11
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    ok ça roule, merci Yogui.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Sécurité] addslashes & mysql_real_escape_string ?
    Par pop_up dans le forum Langage
    Réponses: 5
    Dernier message: 20/05/2008, 10h18
  2. La Sécurité dans Access
    Par Maxence HUBICHE dans le forum Sondages et Débats
    Réponses: 81
    Dernier message: 24/06/2007, 01h07
  3. probleme de sécurité
    Par maxmj dans le forum ASP
    Réponses: 2
    Dernier message: 10/11/2003, 20h44
  4. [TomCat][sécurité]config fichier web.xml
    Par liomac dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 24/09/2003, 15h46
  5. Pb de sécurité
    Par xtrips dans le forum Débuter
    Réponses: 6
    Dernier message: 16/04/2003, 07h50

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