OVH Cloud OVH Cloud

Soucis avec magic_quotes_gpc

27 réponses
Avatar
Zouplaz
Bonjour, je cherche une solution pour faire un addslashes systématiquement
si le système hôte n'a pas l'option magic_quotes_gpc activée (et donc que
les données provenants d'un POST/GET/COOKIE sont livrées telles quelles)

Tous les accès aux variables GET ou POST de mon application passent par
cette méthode :

function getRequestParam($paramName)
{
global $HTTP_SERVER_VARS;

if($HTTP_SERVER_VARS['REQUEST_METHOD']=="GET")
$result = $_GET[$paramName];
else
$result = $_POST[$paramName];

if (!get_magic_quotes_gpc())
$result = addslashes($result);
return $result;
}

Et malgré tout, sur le système de production (FreeBSD PHP 4.3.10 en CGI),
j'obtiens des erreurs lorsqu'une quote est insérée dans un champ de
formulaire.

Par ailleurs, je précise que j'utilise toujours la syntaxe suivante dans
mes requêtes SQL :

nom_de_champ_db = '$valeur_du_champ'

Je veux dire par là que je mets la valeur du champs elle même entre ''


Une idée ?

Par avance merci.

10 réponses

1 2 3
Avatar
John GALLET
Bonjour,

Bonjour, je cherche une solution pour faire un addslashes systématiquement
si le système hôte n'a pas l'option magic_quotes_gpc activée
Ca c'est normal.


les données provenants d'un POST/GET/COOKIE sont livrées telles quelles)
Certes.


Tous les accès aux variables GET ou POST de mon application passent par
cette méthode :
Bien pour le fait d'avoir un point d'entrée unique.


function getRequestParam($paramName)
{
global $HTTP_SERVER_VARS;
Sauf à vouloir conserver une rétrocompatibilité anté PHP 4.1.0,

utiliser $_SERVER **sans* le mot clef global.
http://fr2.php.net/manual/en/reserved.variables.php#reserved.variables.server

Et si je reçois pas la variable ? isset() est faite pour être utilisée.

if($HTTP_SERVER_VARS['REQUEST_METHOD']=="GET")
$result = $_GET[$paramName];
else
$result = $_POST[$paramName];


NON.

Combien de fois faudra-t-il le répéter ON S'EN BAT LES ****** QUE LA
DONNEE ARRIVE EN get OU EN post.

<soupir>A quoi ça sert que Ducros il se décarcasse ? Le lien a
même été publié (probablement par erreur de sa part il voulait sans doute
l'envoyer par mail) aujourd'hui même par Laurent D. avec mon nom comme
titre (c'est mal). </soupir>

Utiliser $_REQUEST à partir de la version version 4.1.0 (et avant,
HTTP_ENV_GET_VARS et POST car la stupide différenciation était forcément
faite).
http://fr2.php.net/manual/en/reserved.variables.php#reserved.variables.request

if (!get_magic_quotes_gpc())
$result = addslashes($result);
return $result;
}


Il y a peut-être un gag mais je ne le vois pas.

Et malgré tout, sur le système de production (FreeBSD PHP 4.3.10 en CGI),
Vérifier dans le manuel comment php se comporte par rapport à php.ini en

mode CGI ainsi que ses options de compilation. Vérifier aussi la directive
magic_quotes_sybase qui est prioritaire.

j'obtiens des erreurs lorsqu'une quote est insérée dans un champ de formulaire.
C'est à dire une erreur ? Pas d'ajout de devant ?


a++;
JG

Avatar
Zouplaz
John GALLET wrote in
news::

utiliser $_SERVER **sans* le mot clef global.
http://fr2.php.net/manual/en/reserved.variables.php#reserved.variables.
server

Et si je reçois pas la variable ? isset() est faite pour être
utilisée.

if($HTTP_SERVER_VARS['REQUEST_METHOD']=="GET")
$result = $_GET[$paramName];
else
$result = $_POST[$paramName];


NON.

Combien de fois faudra-t-il le répéter ON S'EN BAT LES ****** QUE LA
DONNEE ARRIVE EN get OU EN post.


Utiliser $_REQUEST à partir de la version version 4.1.0 (et avant,
HTTP_ENV_GET_VARS et POST car la stupide différenciation était
forcément faite).


Bien, je prends note - suis passé à côté depuis une éternité (mais
comment est-ce possible ?) !


if (!get_magic_quotes_gpc())
$result = addslashes($result);
return $result;
}


Il y a peut-être un gag mais je ne le vois pas.

Et malgré tout, sur le système de production (FreeBSD PHP 4.3.10 en
CGI),
Vérifier dans le manuel comment php se comporte par rapport à php.ini

en mode CGI ainsi que ses options de compilation. Vérifier aussi la
directive magic_quotes_sybase qui est prioritaire.



Je vais fouiner dans la doc

j'obtiens des erreurs lorsqu'une quote est insérée dans un champ de
formulaire.
C'est à dire une erreur ? Pas d'ajout de devant ?




Je ne sais pas. J'ai testé par moi même mais n'ai pas pu reproduire
l'erreur. Un client s'est plaint à mon client de ne pas pouvoir mettre
d'apostrophe dans un formulaire, il récoltait une erreur SQL - Dès qu'il
a supprimé l'apostrophe tout est rentré dans l'ordre.
Je suis donc bien obligé de le croire, il aurait pas inventé un truc
pareil et du coup je me suis dit qu'il y avait une erreur possible dans
mon code.

Mais si déjà le code ci-dessus est valide, ça me rassure !

Je vais investiguer - En tout cas, merci pour la réponse


Avatar
bruno
sinon, voila un post avec mon code un pue similaire :))

http://groups.google.fr/group/fr.comp.lang.php/browse_thread/thread/477ec782ceed3fb9/070392a6b848673c#070392a6b848673c
Avatar
Thomas Harding
Le 06-09-2005, John GALLET a écrit :
Combien de fois faudra-t-il le répéter ON S'EN BAT LES ****** QUE LA
DONNEE ARRIVE EN get OU EN post.

<soupir>A quoi ça sert que Ducros il se décarcasse ? Le lien a
même été publié (probablement par erreur de sa part il voulait sans doute
l'envoyer par mail) aujourd'hui même par Laurent D. avec mon nom comme
titre (c'est mal). </soupir>

Utiliser $_REQUEST à partir de la version version 4.1.0 (et avant,
HTTP_ENV_GET_VARS et POST car la stupide différenciation était forcément
faite).


Et si on veut différencier les actions en fonction de la provenance
GET ou POST, on peut ?



--
Thomas Harding

Avatar
Olivier Miakinen
Le 07/09/2005 23:21, Thomas Harding a demandé :

Et si on veut différencier les actions en fonction de la provenance
GET ou POST, on peut ?


Oui, bien sûr, on peut. On peut même inventer un cas tordu dans lequel
une page reçoive simultanément la même variable dans $_POST, $_GET et
$_COOKIE, avec bien sûr trois valeurs différentes sinon ce ne serait pas
drôle. La seule question intelligente à se poser dans ce cas-là, c'est
pourquoi on voudrait faire une telle chose (en excluant bien sûr le cas
du test qui prouve que c'est possible).

Avatar
loufoque
Zouplaz a dit le 06/09/2005 à 14:18:
Bonjour, je cherche une solution pour faire un addslashes systématiquement
si le système hôte n'a pas l'option magic_quotes_gpc activée (et donc que
les données provenants d'un POST/GET/COOKIE sont livrées telles quelles)


Quelle horreur.
magic_quotes_gpc est une abomination, tu devrais plutôt faire en sorte
de le désactiver.
Ça a été créé pour empêcher que les débutants se prennent des failles,
un site pro ne devrait surtout pas l'utiliser...

Ce n'est pas POST/GET/Cookie qu'il faut échapper, ce sont les chaînes
que tu insères dans une requête.
Ces chaînes ne sont pas forcément POST/GET/Cookie, et il se peut que tu
veuilles utiliser les variables POST/GET/Cookie pour autre chose que
créer des requêtes.
De plus l'échappement réalisé n'est valable qu'avec certains SGBDs, ce
qui empêche la portabilité.

De toutes façons il a été décidé que cette directive serait
définitivement supprimée prochainement.

Avatar
Bruno Baguette

De toutes façons il a été décidé que cette directive serait
définitivement supprimée prochainement.


Vous pourriez développer ce dernier point ?

Actuellement, je me sers de cela pour récupérer les variables plus
proprement :

if(get_magic_quotes_gpc()==0)
{
$Titre = trim($_REQUEST['Titre']);
$Description = trim($_REQUEST['Description']);
}
else
{
$Titre = trim(stripslashes($_REQUEST['Titre']));
$Description = trim(stripslashes($_REQUEST['Description']));
}

Si cette directive est supprimée, comment pourra-t-on donc repérer si
les variables ont été polluées de ou non ?

D'avance merci !

--
Bruno BAGUETTE -

"Nous souhaitons aider les communautés les plus pauvres de ce pays.
Que personne ne croie qu'aux Etats-Unis tout le monde vit dans
l'abondance. Ils ont des millions de pauvres là-bas"
Aout 2005 - Hugo Chavez, Président du Vénézuela.

Avatar
Demosthene
La seule question intelligente à se poser dans ce cas-là, c'est
pourquoi on voudrait faire une telle chose (en excluant bien sûr le cas
du test qui prouve que c'est possible).


Bonjour,

Il est possible d'imaginer la reprise d'un projet un peu lourd, dont il
est nécessaire de réorganiser l'architecture, ce genre de percussion
peux arriver.

Démosthène

Avatar
John GALLET
Et si on veut différencier les actions en fonction de la provenance
GET ou POST, on peut ?


Ca n'a strictement aucun intérêt et ça prouve qu'on a rien compris au
film, mais techniquement, on peut.

a++;
JG

Avatar
John GALLET
De toutes façons il a été décidé que cette directive serait
définitivement supprimée prochainement.


Source svp ?
JG

1 2 3