Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Variables Globales a OFF : contournement

20 réponses
Avatar
Road2Hells
Salut,

en attendant de purger mes scripts contenant encore des variables globales
j'ai rajouté ceci au début ma librairie principale appelé par toutes mes
pages
[code]
foreach ($_POST as $k => $v) {
if ( (isset($_POST[$k])) && (!isset($$k)) ) {
$$k=$_POST[$k];
}
}
foreach ($_GET as $k => $v) {
if ( (isset($_GET[$k])) && (!isset($$k)) ) {
$$k=$_GET[$k];
}
}
[/code]

en gros ça me recrée les variables envoyés par les formulaires
pour chaque $_GET/POST[nom_variable] il me recrée une variable
$nom_variable

y a t'il un autre moyen lorsque les variables globales sont à OFF dans le
php.ini?

--
Bertrand
Qui trop écoute la météo, passe sa vie au bistrot
(proverbe breton)

10 réponses

1 2
Avatar
slambert
en attendant de purger mes scripts contenant encore des variables globales
j'ai rajouté ceci au début ma librairie principale appelé par toutes mes
pages
[code]
foreach ($_POST as $k => $v) {
if ( (isset($_POST[$k])) && (!isset($$k)) ) {
$$k=$_POST[$k];
}
}
foreach ($_GET as $k => $v) {
if ( (isset($_GET[$k])) && (!isset($$k)) ) {
$$k=$_GET[$k];
}
}
[/code]

en gros ça me recrée les variables envoyés par les formulaires
pour chaque $_GET/POST[nom_variable] il me recrée une variable
$nom_variable


Super dangereux.

Rajoute au moint un stripslashes, un trim, un striptag, un htmlentities,
voir un str_replace sur les % .

Au MI-NI-MUM. Et n'oublie pas non plus le cas des tableaux.

Tu peux, peut etre , faire comme cela, à la seule et unique condition de
bien comprendre ce que tu fais et de faire ton code en conséquence.


y a t'il un autre moyen lorsque les variables globales sont à OFF dans le
php.ini?


tu as le cas des magic quote aussi, dont il faudra prendre soin dans tes
tests....
if (get_magic_quotes_gpc()==1) .......

@++

Stef

Avatar
thierry
Salut,
bonjour,


le code

foreach ( $_REQUEST as $k => $v ) {
if ( !isset(${$k}) )
${$k} = $v;
}

devrait suffire

sinon
http://fr2.php.net/manual/fr/ini.core.php#ini.register-globals
si tu as accès à un htaccess (si ton serveur est sous apache quoi)


en attendant de purger mes scripts contenant encore des variables globales
j'ai rajouté ceci au début ma librairie principale appelé par toutes mes
pages
[code]
foreach ($_ as $k => $v) {
if ( (isset($_POST[$k])) && (!isset($$k)) ) {
$$k=$_POST[$k];
}
}
foreach ($_GET as $k => $v) {
if ( (isset($_GET[$k])) && (!isset($$k)) ) {
$$k=$_GET[$k];
}
}
[/code]

en gros ça me recrée les variables envoyés par les formulaires
pour chaque $_GET/POST[nom_variable] il me recrée une variable
$nom_variable

y a t'il un autre moyen lorsque les variables globales sont à OFF dans le
php.ini?



Avatar
thierry
enfonçons une porte ouverte

évidemment dans ton foreach tu DOIS valider le format
des entrées
Avatar
Road2Hells
le23 mars 2007, thierry a dégazé dans fr.comp.lang.php:

le code

foreach ( $_REQUEST as $k => $v ) {
if ( !isset(${$k}) )
${$k} = $v;
}

devrait suffire
sauf qu'en fonction de la directive de ton php.ini varables_orders=EGPCS

les résultat de $_REQUEST peuvent être imprévisible si tu a la mauvaise
idées d'appeller des variables de la même facon que certaines autres comme
des variables d'environnement ou server
je ne veux que POST et GET
je ne me sert pas, ni des $_ENV, ni des variables $_COOKIES, ni des
variables $_SERVER

sinon
http://fr2.php.net/manual/fr/ini.core.php#ini.register-globals
si tu as accès à un htaccess (si ton serveur est sous apache quoi)
en local oui mais chez mon hébergeur non :-)




--
Bertrand
Qui trop écoute la météo, passe sa vie au bistrot
(proverbe breton)

Avatar
Road2Hells
le23 mars 2007, slambert a dégazé dans fr.comp.lang.php:

[code]
foreach ($_POST as $k => $v) {
if ( (isset($_POST[$k])) && (!isset($$k)) ) {
$$k=$_POST[$k];
}
}
foreach ($_GET as $k => $v) {
if ( (isset($_GET[$k])) && (!isset($$k)) ) {
$$k=$_GET[$k];
}
}
[/code]
Super dangereux.


Rajoute au moint un stripslashes, un trim, un striptag, un
htmlentities, voir un str_replace sur les % .

Au MI-NI-MUM. Et n'oublie pas non plus le cas des tableaux.

Tu peux, peut etre , faire comme cela, à la seule et unique condition
de bien comprendre ce que tu fais et de faire ton code en conséquence.
pour info avant toutes injections/requetes mysql je passe mes variables

dans une de ces 2 fonctions
(j'utilise les librairies ADOdb pour mes accès database)

[code]
function make_db_safe ($input) {
// data going into the db
global $conf, $conn;
if ($conf[strip_html] = "yes") {
$output = strip_tags($input, $conf[allowed_html_tags]);
// strips out disallowed tags
}
$output = $conn->qstr($output, get_magic_quotes_gpc());
return $output;
}

function make_db_extra_safe ($input) {
// handles data going into the db
global $conn;
$output = strip_tags($input); // strips out all tags
$output = ereg_replace (";","",$output);
$output = $conn->qstr($output, get_magic_quotes_gpc());
return $output;
}
[/code]

--
Bertrand
Qui trop écoute la météo, passe sa vie au bistrot
(proverbe breton)


Avatar
slambert
function make_db_safe ($input) {
// data going into the db
global $conf, $conn;
if ($conf[strip_html] = "yes") {
$output = strip_tags($input, $conf[allowed_html_tags]);
// strips out disallowed tags
}
$output = $conn->qstr($output, get_magic_quotes_gpc());
return $output;
}


Je déduis a la présence de tes global ue tu n'as pas choisis la solution de
classes de conf qui te donne accès a des valeurs constantes via des appels
statiques...... Je n'aime pas les globales, mais bon.

Je pensais faire surtout tes verification non pas au moment de mettre dans
la bd, mais quand tes paramèteres arrivent. Tout en haut de la chaine, en
fait. Comme ca, meme si tu oublies ton appel avant une écriture, tes données
ont déjà été parsées. Et cela te permet de faire un moulinette plus
générale, y compris anti crossscripting.

Mais c'est dangereux tout de meme. Rien ne dit qu'un petit malin qui jouera
avec les urls ou un moteur d'envoit de param POST ne trouveras pas une
faille ou un truc que tu n'auras pas prévu. Il m'est arrivé de le faire sur
certains petits projets non vraiment critiques, mais mon écriture est dans
ce cas en conséquence.

Stef

Avatar
Road2Hells
le23 mars 2007, slambert a dégazé dans fr.comp.lang.php:

function make_db_safe ($input) {
// data going into the db
global $conf, $conn;
if ($conf[strip_html] = "yes") {
$output = strip_tags($input, $conf[allowed_html_tags]);
// strips out disallowed tags
}
$output = $conn->qstr($output, get_magic_quotes_gpc());
return $output;
}


Je déduis a la présence de tes global ue tu n'as pas choisis la
solution de classes de conf qui te donne accès a des valeurs
constantes via des appels statiques...... Je n'aime pas les globales,
mais bon.
je programme mais en gros j'ai apris tout seul, en progressant du basic à

dcl/vms puis turbo pascal et perl puis php/mysql. j'en suis là !

Aucune méthode, juste que je regarde ce que font les autres, si je le
comprend et en saisit le concept, je l'intègre à mes developpements futurs
:-)
donc ta réflexion sur "solution de classes de conf qui te donne accès a des
valeurs constantes via des appels statiques" me laisse un peu pantois et
perplexe !

je suppose que ça cause "objet" mais je n'ai pas encore intégré ça dans un
coin de mon cerveau tordu.

tu aurais un exemple concis que je me faisse une idée :-) merci


--
Bertrand
Qui trop écoute la météo, passe sa vie au bistrot
(proverbe breton)


Avatar
slambert
donc ta réflexion sur "solution de classes de conf qui te donne accès a
des
valeurs constantes via des appels statiques" me laisse un peu pantois et
perplexe !


L'appel à des valeurs statiques est une solution pour éviter de mettre des
constantes en globales ou de passer 40 000 paramètres à une fonction /
méthode.


je suppose que ça cause "objet" mais je n'ai pas encore intégré ça dans un
coin de mon cerveau tordu.
tu aurais un exemple concis que je me faisse une idée :-) merci



Bah, il faut aussi savoir ne pas faire d'objet.

Mais parfois, un bon petit modèle MVC....

Je t'encourage à aller te documenter. Au mieux, cela te fera une corde de
plus a ton arc, au pire, cela complètera ta culture : )

Stef

Avatar
Jerome Blion
Bonsoir,

Ca va faire CINQ ANNEES (avril 2002) que le groupe PHP a sorti PHP 4.2.0
dans lequel la configuration par défaut désactive les globales...

Et aujourd'hui, vous cherchez toujours à la contourner...

Rappelez vous ce que disait Darwin. Seules les espèces adaptées
survivent. Tous les bidouillages pour recréer des pseudo-variables
globales m'horrifient...

En refaisant cette couche, vous passez du temps à sécuriser ce système
(ce que le groupe PHP n'a pas fait !!!) et finalement, ce temps, vous ne
le passez pas sur quelque chose de plus productif...

Bonne nuit.
Jérôme.
Avatar
Road2Hells
le24 mars 2007, Jerome Blion a dégazé dans fr.comp.lang.php:

Bonsoir,
Ca va faire CINQ ANNEES (avril 2002) que le groupe PHP a sorti PHP 4.2.0
dans lequel la configuration par défaut désactive les globales...
Et aujourd'hui, vous cherchez toujours à la contourner...
et alors ?

le php offre cette possibilité et certains hébergeurs la positionne sur
off.
je ne vois pas bien où est le problème !

Rappelez vous ce que disait Darwin. Seules les espèces adaptées
survivent. Tous les bidouillages pour recréer des pseudo-variables
globales m'horrifient...
je veux bien arrêter de faire des trucs "débiles" mais il faut au moins

m'expliquer pourquoi ?
Si c'est juste parce que c'est désactivé par défaut, c'est léger comme
explication !

En refaisant cette couche, vous passez du temps à sécuriser ce système
(ce que le groupe PHP n'a pas fait !!!) et finalement, ce temps, vous ne
le passez pas sur quelque chose de plus productif...
je ne vois pas bien où est le probleme ?

en quoi $_POST[mavariable] est moins dangeureux que $mavariable

j'ai loupé un épisode ou bien ?


--
Bertrand
Qui trop écoute la météo, passe sa vie au bistrot
(proverbe breton)

1 2