Aller au contenu

register_global = OFF/ON


Sujets conseillés

Posté

Bonjour le Hub,

je dispose d'une appli ecrite en php qui ne supporte pas le mode off du register,

je dispose d'un serveur dedié mais je ne veux pas passer le php.ini sur on, existe t'il un moyen simple pour forcer un repertoire d'un site sur mon serveur à passer sur on ??

merci de votre aide

Florent

Posté

Normalement, il suffit de faire un .htaccess à la racine du sous domaine, avec :

php_value register_globals 1

Posté

Si tu ne veux pas le faire avec le fichier htaccess, tu peux aussi le faire en php. Pour cela, le principe est d'instancier les variables, sauf celles passées par GET ou POST, qui elles sont récupérées.

Personnellement, je considère qu'une application qui récupère toutes les variables n'est pas une bonne application. Il NE faut PAS travailler en register_globals=off.

Cela consiste à accépter toutes les variables venant de l'extérieur, donc à laisser la porte de sa maison ouverte.

Cela oblige donc à mettre un garde du corps devant la porte, ou si tu préfère, à tester systématiquement toutes les variables, du style :

si ($age>0 ou age<100)age=0 etc... Meme celles qui sont déjà dans le script.

Si tu y tiens vraiment, donc :

http://www.phpindex.com/trucsetastuces/tru...hp3?element=206 ( A noter que la fonction vient du moteur de recherche : Phpdig, comme l'indique son nom : phpdigHttpVars. mais... ce n'est pas mentionné dans l'article, ce qui est bien dommage....)

A.

Posté

Bonjour,

Personnellement, je considère qu'une application qui récupère toutes les variables n'est pas une bonne application. Il NE faut PAS travailler en register_globals=off.

:unsure: Je suis d'avis contraire. Il FAUT travailler en register_globals = OFF.

D'ailleurs, je pense que c'est ce que tu as voulu dire...

Me trompais-je ?

:rolleyes:

xpatval

Posté

:whistling: c'est à quel sujet... ? :whistling:

En fait, oui, il faut travailler avec

register_globals = off

(je suis allé vérifier ;) )

Pour l'url : localhost/reg.php?pass=coucou

et pour le code :

echo "<br>get : ".$_GET['pass'];

echo "<br> reg. on : ".$pass;

register_globals = off donne :

get : coucou

reg. on :

register_globals = on donne :

get : coucou

reg. on : coucou

;)

Posté

Le plus "secure" n'est-il pas d'utiliser la forme

$monparam=(isset($_GET['param']) ? $_GET['param'] : '');

?

Mais bon cela n'enlève rien au gros avantage de travailler en 'global off', car il y a toutes les autres variables...

Il suffit de regarder ses logs et de voir comment on se fait "attaquer" en permanence par des zigotos qui mettent plein de trucs en params de nos adresses...

Posté (modifié)

Il existe un moyen très simple de permettre au script ne fonctionnant pas avec le register global a off.

C'est une sorte de patch qui transforme les $_GEt, $_POST en variable du même nom ; )

foreach( $_REQUEST as $e => $f )
{
    $$e = $f;
}

A metter au début de chaque page :1eye:

Modifié par cepiat
Posté

Le $_REQUEST n'est pas le seul pour ce genre de chose...

Extract() s'utilise aussi pour s'éviter encore plus les complications.

Mais dans ce cas, utiliser extract(), ou remettre le register_global à ON (hormis pour les raisons de sécurités) revient à se faciliter la vie en ne plus codant proprement... :nono::nono:

xpatval

Posté (modifié)

Entièrement d'accord avec toi, le mieux est de recoder le site , mais dans certains cas(manque de temp, ect...) , cette rustine est pratique .

Au sujet de extract , j'y avais pas pensé , c'est vrai plus simple Merci :1eye:

Quoi que je comprend pas trop ce que tu dis en disant

Le $_REQUEST n'est pas le seul pour ce genre de chose...

Car même en utilisant extract ce serais extract ($_REQUEST) qu'il faudrais mettre.

$_REQUEST contient $_GET , $_POST , $_COOKIE et avant php4.3.0 $_FILE aussi

Modifié par cepiat
Posté

Je n'ai jamais testé avec extract($_REQUEST)...

Seulement avec cela

extract($HTTP_POST_VARS,EXTR_OVERWRITE);

extract($HTTP_GET_VARS,EXTR_OVERWRITE);

xpatval

Posté (modifié)

Ah oki $HTTP_POST_VARS est déprécier depuis PHP 4.1.0. il faut maintenant utiliser $_POST et $_GET à la place ;)

Donc ton code pourrais se simplifier avec

extract($_POST,EXTR_OVERWRITE);
extract($_GET,EXTR_OVERWRITE);

Voir même beaucoup plus simple ; ) avec

extract($_REQUEST,EXTR_OVERWRITE)

Modifié par cepiat
Posté

Vous posez un petit problème....

Imaginons que l'on veuille passer des variables POST et GET entre 2 pages. Comment on fait ? La première écrase l'autre ? Et si l'on ajoute les sessions ?

Dans le script, on aura quelque chose comme ca :

<form method=POST action=index.php?pass=ok>
<input type=text name=pass value=machin>
</form>

Et pour récupérer les données :

if ($_GET['pass']=='ok')
if $_POST['pass']==machin)echo "Bonjour machin";

Dans le cas que vous donnez, la première écrase la seconde, qui ne fonctionnera plus. Pourtant le script que je donne est parfaitement valable...

??

Posté (modifié)

effectivement cela ne règle pas le souci à tous les coups mais ,

il s'agit là d'une rustine si on change d'herbergeur et que l'on à pas le tempsde recoder, si ca passe avec ca , ca permet de rallonger son sommeil ;) , ce n'est pas une facon de programmer ;) et hereusement ;)

Modifié par cepiat
Posté (modifié)

Cette manip marche-t-elle aussi sur online.net

Car la, le register global est forcé, c'est pas un serveur dedié :s

Je pense que non, mais on sais jamais.

Car en ce moment je boss sur un site et ca risque de poser de serieux pb de securité ( un petit get et voila :s)

Modifié par Billyboy
Posté
Dans le cas que vous donnez, la première écrase la seconde, qui ne fonctionnera plus. Pourtant le script que je donne est parfaitement valable...

Absolument.

A l'époque, lorsque j'ai rencontré ce problème, j'ai pu le résoudre rapidement par $_REQUEST. Ceci évite de se poser la question de la méthode utilisée.

L'inconvénient est que si je prône un codage propre en respectant le OFF du register_global, je transgresse ma règle en me simplifiant autrement la vie.

Je ne me suis pas penché plus avant afin d'éviter le $_REQUEST, mais je pense qu'il doit être possible (comment ?) de savoir quelle est la méthode utilisée pour chaque variable, puis de passer par une fonction particulière .

xpatval

Posté

Pour ceux chez qui la variable register_globals est mise à 'on' et qui n'ont pas accès au fichier php.ini, il existe une solution en rajoutant une ligne dans le fichier .htaccess:

php_value register_globals 0

ou pour l'activer si nécessaire:

php_value register_globals 1

Dan

Posté

Je vais tester ca sur online.net, le meilleur moyen de le savoir c'est d'essayer :1eye:

Je vous dirais si ca marche ;)

Merci DAN meme si ca avais deja été cité plus haut :wub:

@+

Billy

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...