|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Membre habitué
![]() Inscription : août 2006 Messages : 613 ![]() |
Bonjour tout le monde,
J'ai une question qui va certainement faire l'objet d'un débat. Je suis entrain de créer un site que j'aimerais bien sécuriser. J'ai vu dans un livre qu'il récupère la variable Get de cette façon Code livre Code :
Code de tout le monde Code :
|
||||
|
|
00
|
|
|
#2 | |||
|
Membre éclairé
![]() Inscription : août 2006 Messages : 379 ![]() |
Citation:
En effet, il faut au minimum vérifié que, dans ce cas, $_GET['nom'] ne contient QUE des lettres. De plus ... ces deux fonctions n'ont rien à voir. La première travail la chaine en ajoutant des slashes soit de manières automatiques, soit avec la fonction addslashes(). Alors que la seconde ne fait juste que définir $nom. P.s : La plus part du temps on met les magic_quotes à 0. |
|||
|
|
00
|
|
|
#3 | ||||
|
Membre habitué
![]() Inscription : août 2006 Messages : 613 ![]() |
Merci beaucoup. Si j'ai bien compris, c'est ce que je dois faire:
Premier cas Je ne suis pas sûr Code :
Etant donné que if(!is_numeric($_GET['ID'])) demande déjà si un nombre numérique est envoyé par GET. Dites-moi si je me trompe. Si je devrais obligatoirement faire les deux (isset et !is_numeric) Deuxième cas. Je ne suis pas sûr non plus Code :
|
||||
|
|
00
|
|
|
#4 | |
|
Membre chevronné
![]() Développeur Web Inscription : avril 2005 Messages : 726 ![]() |
Citation:
Sur la plupart des hébergeurs (mutualisés notamment), magic_quotes_gpc est à On, bien que j'ai lu quelque part dans ce forum que l'option disparaitra dans PHP6. On sera alors contraint d'utiliser à chauqe fois addslashes. L'intérêt du bout de code Code :
$nom = (get_magic_quotes_gpc()) ? $_GET['nom'] : addslashes($_GET['nom']); |
|
|
|
00
|
|
|
#5 | ||||
|
Membre habitué
![]() Inscription : août 2006 Messages : 613 ![]() |
Ok d'accord je comprends.
Mais le fait d'échapper les éventuels noms avec apostrophe ne posera pas de problème à l'affichage? Je m'explique: Mon Magic quote est à off. Si je récupère des données d'un formulaire supposons que j'insère directement "aujourd'hui" dans la DB. J'aurai aujourd'ui alors que si je fais: Code :
Pk essayer de faire la barre d'échappement? Si c'est pour éviter que l'internaute envoie directement une commande sql à la base depuis le formulaire. Ce serai pas mieux de faire comme ça ? Code :
Qu'en penses-tu? |
||||
|
|
00
|
|
|
#6 |
|
Membre chevronné
![]() Développeur Web Inscription : avril 2005 Messages : 726 ![]() |
Effectivement, il est préférable d'utiliser mysql_real_escape_string.
Cependant, il me semble que quand tu mets un addslashes puis que tu envois ta variable à la DB, la variable est correctement enregistrée (sans \). C'est logique puisque celui-ci est interpreté par le SGBD (ex: si tu insert de la manière suivante : "INSERT 'test\'test' INTO ...", tu aura bien test'test d'enregistré) |
|
|
00
|
|
|
#7 | ||
|
Membre habitué
![]() Inscription : août 2006 Messages : 613 ![]() |
Merci pour ta réponse.
Donc le magic quote serait un plus au cas où dans php.ini il serait mis sur on. Peux-tu me dire si ce code est assez robuste? Code :
|
||
|
|
00
|
|
|
#8 |
|
Membre chevronné
![]() Développeur Web Inscription : avril 2005 Messages : 726 ![]() |
A mon avis, oui, tant que magic_quote_gpc est à Off.
Mais, comme je le disais un peu plus haut, si tu passe ton site en production sur un mutualisé, tu risque d'avoir de mauvaises surprises ensuite |
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() Inscription : août 2006 Messages : 379 ![]() |
Tu peux aussi le mettre à off (0).
|
|
|
00
|
|
|
#10 | ||
|
Membre habitué
![]() Inscription : août 2006 Messages : 613 ![]() |
Oui tu as raison, mais même si magic quote est sur on, tant qu'on utilise mysql_real_escape_string($_POST['nom'], on aura aucun problème. Rassure-moi que je n'ai pas tort. Que le code que j'avais écris suffit pour contourner les problèmes de magic quote (on ou off)
Code :
|
||
|
|
00
|
|
|
#11 |
|
Membre éclairé
![]() Inscription : août 2006 Messages : 379 ![]() |
A vrai dire, vu que je met toujours à off ... je sais pas trop comment ça traite les variables ...
J'ai pris cette habitude au commencement et j'me suis jamais vraiment pausé la question. Mais selon la définition toute variable est addslashé (ouaw). Donc je pense pas que ça fonctionne correctement ton histoire Mais il faudrait tester xD |
|
|
00
|
|
|
#12 | ||||
|
Membre chevronné
![]() Développeur Web Inscription : avril 2005 Messages : 726 ![]() |
Je test.
edit: test.php?nom='sqdf'qsdf Code :
Citation:
magic quote à off affichage : Citation:
Ca ne marche pas ton truc. C'est même assez catastrophique puisqu'il échappe le "'" et le "\", ce qui nous fait 3 \ pour 1 '
|
||||
|
|
00
|
|
|
#13 |
|
Membre habitué
![]() Inscription : août 2006 Messages : 613 ![]() |
Oui Merci bcp Altabush
|
|
|
00
|
|
|
#14 | ||
|
Membre habitué
![]() Inscription : août 2006 Messages : 613 ![]() |
Tu as mis des concaténations et des guillemets que je ne comprends pas. A mon avis, c'est ce qu'il faut faire. Corrige moi si je me trompe:
Code Code :
|
||
|
|
00
|
|
|
#15 | |
|
Membre chevronné
![]() Développeur Web Inscription : avril 2005 Messages : 726 ![]() |
Test le tel quel, regarde ce que ça fait:
Citation:
1) mysql_real_escape_string est dans une chaine de caractère et ne sera donc pas interprété (enfin si, comme du texte donc bon) 2) $_GET[''] ne sera pas compris non plus, on ne peux insérer que des variable simples (!= tableau ou objets) dans des chaines avec ". |
|
|
|
00
|
|
|
#16 | ||||
|
Membre à l'essai
![]() Inscription : septembre 2004 Messages : 33 ![]() |
bonjour,
Peut etre que ça peut aider j'utilise cette fonction que j'avais trouvée dans un très bon bouquin "site web marchand" Elle permet de filter les données. Code :
Code :
|
||||
|
|
00
|
|
|
#17 | ||
|
Membre habitué
![]() Inscription : août 2006 Messages : 613 ![]() |
Oui je vois ce que tu veux dire.
Dans ce cas, il faut traiter la variable avant son insertion de cette manière ci. D'ailleurs, c'est plus propre: Code :
|
||
|
|
00
|
|
|
#18 |
|
Membre éclairé
![]() Inscription : août 2006 Messages : 379 ![]() |
Ademain => Il n'y a rien à revoir avec les futurs versions
On écrit : si inférieur. Si ça augmente ça change pas. Mais addslashes ne doit plus être utiliser, il faut lui préférer mysql_escape_string() (ou _real). |
|
|
00
|
|
|
#19 |
|
Membre chevronné
![]() Développeur Web Inscription : avril 2005 Messages : 726 ![]() |
Faut pas oublier le test sur les magic quotes, quand même.
|
|
|
00
|
|
|
#20 |
|
Membre habitué
![]() Inscription : août 2006 Messages : 613 ![]() |
Hatabush, il y a plus besoin des tests sur les magic quotes, puisqu'il y a déjà mysql_real_escape_string()
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com