Protection requete SQL

Fermé
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 - 2 juin 2009 à 12:06
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 - 2 juin 2009 à 14:39
Bonjour,

J'aimerais savoir quel est la meilleur protection que l'on peut mettre sur une requete sql et les données qu'on enregistre vie un INSERT.

Je connais plusieur fonction mais je ne sais pas la quel est la meilleur.
Il y a
addslash()
htmlentities()
htmlspecialchars()
mysql_escape_string()
mysql_escape_real_string()

Il y a peut-être des faute d'orthographe car je les écrit de mémoire.

Quel est ou quel sont les meilleur fonctions pour éviter les erreur sql du entre autre au ' et " ?

Merci de vos réponses.

10 réponses

Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
2 juin 2009 à 12:17
Salut,

On utilise plutôt mysql_real_excape_string
https://www.php.net/manual/fr/function.mysql-real-escape-string.php
Car elle prend en compte le jeu de caractère de la connexion actuelle.
1
hanagi Messages postés 135 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 13 décembre 2012 3
2 juin 2009 à 12:12
salut OKUNI, dsl j'ai pas de réponse pour toi mais j'ai plutot une question ,)
Je trouve ce sujet interessant mais j'ai pas compris "protection que l'on peut mettre sur une requete sql et les données qu'on enregistre vie un INSERT". Est ce qu'on protége ces requete? et de quoi les proteger?
voudrais-tu m'éclairer stp ? (curiosité :p)
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
2 juin 2009 à 12:15
Tout simplement pour éviter :
1) le hackage (ça se dit? :p) de ton site (ou plutot de ta base de donnée)
2) pour éviter les failles et erreur a cause des ' ou ".

Donc j'espère diminuer mes failles sql avec de bonnes fonctions.
0
ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013 27
2 juin 2009 à 12:18
Il y de nombreuses failles possibles quand on utilise pas de fonctions particulières.
Exemple : les injections SQL : https://fr.wikipedia.org/wiki/Injection_SQL
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
2 juin 2009 à 12:23
simplement utiliser mysql_real_excape_string ?
cette fonction protège aussi contre les balise html et JS?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hanagi Messages postés 135 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 13 décembre 2012 3
2 juin 2009 à 12:43
Oh! ça c bon OKUNI ;) , mais je le savais pa :p
Pouvez vous me montrer comment on utilise ces fonctions? (syntaxe)
par exemple pour :mysql_real_excape_string
J'en ai aucune idée :s . Besoin de votre aide
Merci d'avance .
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
2 juin 2009 à 12:53
Pour rappel, il faut protéger toutes les données provenant de l'utilisateur afin d'éviter les injections SQL ou la perte de cohérence des données. Une petite recherche sur google en apprendra plus à ceux qui le souhaitent.

Une fonction ne suffit pas à assurer la sécurité de tes requêtes : les fonctions que tu présentes ne servent qu'à protéger les chaines de caractères, mais il faut aussi penser à vérifier que lorsque des valeurs numériques sont attendues, on insère bien des valeurs numériques, et idem pour les autres champs.

Si tu as une base de données mysql, utilise la fonction mysql_real_escape_string pour tes chaînes de caractères, sinon utilise htmlspecialchars.

Pour les valeurs numériques, tu peux utiliser is_numeric, pour les dates, les email, les numéros de téléphone, des expressions régulières seront toutes indiquées.

Tu les appelles en leur passant la chaine à protéger en paramètre :
INSERT INTO table( 'login' ) VALUES mysql_real_escape_string( $POST['login'] );
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
2 juin 2009 à 12:50
Non elle mysql_real_escape_string ne protège pas des balises HTML, tu parlais de protection SQL pas de protection HTML.

On utilise toujours mysql_real_escape_string avant une insertion (ou update) dans la base afin de ne pas perturber le bon fonctionnement de la commande (effectivement pour les ' " \n et qq autres). Mais rien n'interdit d'y inserer des balises HTML (heureusement :-) )

Mais la protection du HTML c'est autre chose, par exemple au moment de traiter une donnée saisie par l'utilisateur on va vouloir filtrer les balises HTML, on va alors utiliser htmlentities.
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
2 juin 2009 à 13:26
Ok merci :)
quel est la différence entre htmlentities et htmlspecialchars ?
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
2 juin 2009 à 13:29
htmlentities remplace tous les caractères ayant un équivalent en HTML par cet équivalent (& pour '&', > pour '>', etc), ce qui peut être utile dans certains cas, mais n'apporte pas de protection supplémentaire. Tourne toi vers la documentation php pour plus d'infos.
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100 > pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010
2 juin 2009 à 13:35
Pour moi c'est une protection indispensable (dans le cas d'affichage de données saisies par un utilisateur, blog, wiki ... ) ca évite des injections de code HTML (Cross-Site Scripting) en supprimant les interprétations des balises html notamment script, object, applet et embed
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135 > Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015
2 juin 2009 à 14:16
Tout à fait d'accord, mais ce n'est pas une protection contre les injections SQL. Il est aussi possible d'effectuer le remplacement des caractères à l'affichage par exemple, en fonction de moyen d'affichage (ce n'est pas forcément du HTML). Mais effectivement, si l'application contient des données visibles uniquement en HTML, il est préférable de les stocker directement encodés, ça évite de refaire le traitement à chaque affichage.
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
2 juin 2009 à 13:30
htmlspecialchar ne remplace que ' " & < >, htmlentities remplace tout ce qui a un équivalent en html ( caractères accentués ... )


https://www.php.net/manual/fr/function.htmlspecialchars.php
http://fr2.php.net/manual/fr/function.htmlentities.php
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
2 juin 2009 à 13:44
J'ai regardé le manul php
si je comprend bien, si on utilise htmlentities(), on devra alors chaque fois qu'on affiche une donnée qui a été trensformé, utiliser html_entity_decode() pour enlever les transformations ?
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
2 juin 2009 à 14:17
Pas si tu affiches les données en HTML : dans ce cas, c'est le navigateur qui interprêtera les entités HTML et les affichera correctement : s'il lit é, il affichera é, etc.
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126 > pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010
2 juin 2009 à 14:22
Ok merci.
Quant tu dis "si tu affiches les données en HTML"
Il y a moyen de les afficher autrement?
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135 > okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014
2 juin 2009 à 14:30
Bah avec PHP tu pourrais vouloir afficher du texte dans une image avec la librairie GD, créer un simple fichier texte, du XML, écrire un PDF, etc. Donc oui, il y a moyen de faire autre chose, il y a même plein de moyens !
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126 > pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010
2 juin 2009 à 14:31
Ok merci :)
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135 > okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014
2 juin 2009 à 14:39
De rien ! Pour mes posts précédent, ccm a converti les caractères HTML donc il fallait lire : "s'il lit &eacute;, il affichera é".
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
2 juin 2009 à 14:30
salut,

Quel est ou quel sont les meilleur fonctions pour éviter les erreur sql du entre autre au ' et " ?
il existe PDO depuis PHP5.
PDOStatement->Execute()
0