Aller au contenu

PHP : POST serait une faille?


Messages recommandés

Bonjour tout le monde,

Les programmeurs php se souviennent : Avant, avec les anciennes versions de PHP, il suffisait de faire une page avec dedans

<? echo $toto ?>

.

Vous me suivez jusque-là. La variable $toto n'était définit à nulle part, la page affichera qqch si on tappe dans notre navigateur préféré (firefox) mapage.php?toto=211223

Jusque là tout va bien. En pouvait faire la même chose en en créant un formulaire sur une autre page avec comme action notre fameuse page avec la méthode post, si on avait un champ texte, la page affichera sa valeur.

Bref... Tout cela est bien beau. si maintenant on refait les mêmes expériances avec le php nouveau ça ne fonctionnera plus....

Pourquoi avoir changé qqch qui marchait au poil?

J'ai trouvé une solution pour y remédier dites moi ce que vous en pensez:

Je parle de ça

foreach($_POST as $var=>$value)
 $$var=$value; //Fait $NoCode=sdksjskd; 

Ce petit bout de code prends le tableau posté,

essayez

print_r($_POST)

et vous optiendrez un truc du style:

Array ( [formName] => AddComputer [backurl] => index.php [id] => 19 [NoCode!] => dfsdf [Nom!] => dddd [ipAddress] => asdsda [MacAddress] => dasasddsadsasda [NoSerieManuf] => asddass [FactureNo] => daasd [PurchaseDate] => 2005-05-10 [ModelId] => 8 [CptTypeId] => 2 [inUseId] => 1 [userId] => 2 [RoomId] => 3 [ManufacturerId] => 0 [ProviderId] => 1 [Notes] => lasddas [send] => Update )

Le foreach dont je parle prends tous les noms de variable entre crochets, en crée avec ce nom et les défini. exemple $formName = AddComputer. Et Tout ça est 100% automatique

Ma question est : Je recrée ce que php a supprimé dans ses nouvelles versions, suis-je en train de réactiver une faille?

Lien vers le commentaire
Partager sur d’autres sites

Déjà, appeler une variable non initialisée est crade...

De plus, je vois pas pourquoi recréer un tableau ou des variables par rapport à $_POST...

Et je ne pense pas que tu réactives une failles...

La manière la plus simple (et la plus propre à mon avis) lors de la récupération de donées via formulaires ou url est de controler l'existence l'existence de la donnée:

si ton url est mapage.php?toto=211223

alors tu fais un truc comme ça:

if (isset($_GET['toto'])

{

  //traitement bon

}

else

{

  //traitement erreur

}

Voilou

Lien vers le commentaire
Partager sur d’autres sites

Ouais, ça je connais if(isset(...)) =>

En fait j'ai toujours utilisé ça, mais là le prob c'est que je dois écrire une application de gestion en php basée sur 25 tables avec au moins 20 formulaire allant de 1 à 20 champs, faire la petite boucle foreach me dispense de faire if(isset(...)) J'pense qu'en tout je gagne dans les 500 lignes à faire un truc crade. Moi soucis le plus gros c'est la faille de sécurité.

Lien vers le commentaire
Partager sur d’autres sites

L'initialisation automatique des variables dont tu partle, dépend du flag

register_globals, présent dans php.ini, avant il était par défaut à ON, maintenant il est par défaut à OFF. Ceci, comme tu l'a pressentit, en bonne partie pour des raisons de sécurité.

Il y a un cas d'école sur php.net qui illustre parfaitement les éventuels problèmes de sécurité :

<?php

// $authorized = true uniquement si l'utilisateur est identifié

if (authenticated_user()) {

$authorized = true;

}

// Comme nous n'avons pas initialisé $authorized avec false, cette dernière

// peut être définie via register_globals, comme avec l'URL GET auth.php?authorized=1

// Tout le monde peut facilement être reconnu comme identifié!

if ($authorized) {

include "/donnees/critiques/data.php";

}

?>

Bien évidemment on trouvera rarement (du moins j'espère), un truc aussi évident dans la réalité, mais c'est juste pour donner l'idée...

Donc tu peut réactiver ce flag, mais il faut que tu soit sure de la manière dont sont codés tes scripts ...à tes risques et périls...

Lien vers le commentaire
Partager sur d’autres sites

Ba si les scripts évoluent pas par exemple www.phpscripts-fr.net... et ba j'en conclu que le develloppeur qui à fait le script est soit un flémard... soit n'assume pas sa position sociale de develloppeur... (Humour)...

Enfin bref... je vois pas enormement d'hebergeur en PHP 5 :(

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...