SimpleTest php5 et les super globales

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : SimpleTest php5 et les super globales

par zigz4g » 31 janv. 2006, 12:05

Salut et merci pour toutes votre aide.

Malheureusement, aucunes solutions m'a été appotées. Il n'est effectivement pas possible de mettre une valeur dans des variables superglobales dans un script et l'utiliser avec input_get de filter.

Je n'ai pas trouvé l'explication mais apparament si les variables $_GET ou $_POST ne sont pas recut par un formulaire, php ne veut pas les fournir a filter de pecl.

Ma solution car il en existe une, c'est de faire un script qui affiche un formulaire et le valide par du javascript. Bien sur cette solution n'est valable que lorsqu'on est en phase de tests.

Je ferme donc le topic.

par Ripat » 28 janv. 2006, 14:59

Pour simuler l'envoi d'un formulaire as-tu pensé à CURL?

CURL supporte un grand nombre de protocoles et, pour chacun d'entre-eux, toute une série de méthodes.

J'imagine que ceux qui t'intéressent sont http et https. Voici la liste de ce que CURL est capable d'envoyer:
HTTP
- HTTP/1.1 compliant (optionally uses 1.0)
- GET
- PUT
- HEAD
- POST
- multipart formpost (RFC1867-style)
- authentication: Basic, Digest, NTLM(*1), GSS-Negotiate/Negotiate(*3) and
SPNEGO (*4) to server and proxy
- resume (both GET and PUT)
- follow redirects
- maximum amount of redirects to follow
- custom HTTP request
- cookie get/send fully parsed
- reads/writes the netscape cookie file format
- custom headers (replace/remove internally generated headers)
- custom user-agent string
- custom referer string
- range
- proxy authentication
- time conditions
- via http-proxy
- retrieve file modification date
- Content-Encoding support for deflate and gzip
- "Transfer-Encoding: chunked" support for "uploads"

HTTPS (*1)
- (all the HTTP features)
- using client certificates
- verify server certificate
- via http-proxy
- select desired encryption
- force usage of a specific SSL version (SSLv2(*7), SSLv3 or TLSv1)
Le bind PHP/CURL est assez complet. Tu devrais y trouver de quoi t'amuser.

par zigz4g » 27 janv. 2006, 20:20

Oui ..... mais non. Je veux tester input_get de filter pour pouvoir l'utiliser par
la suite dans mes scripts.

Si j'utiliser filter_data je n'ai plus d'interet d'utiliser filter avec input_get.
Bon d'accord, tu me diras que de toutes facon on peut faire de l'input_get
avec filter_data.

Par contre avec input_get, tu as la securite de prendre la valeur exact dans l'une des variables $_GET...

Dans mon cas input_get est important car je souhaites avoir une securite
sur les informations que je recevrais des navigateurs.

Bon bah je penses qu'il n'y a plus trop de solution. Je vais devoir me coder un generateur de formulaires pour lancer mes testes. Par contre comment faire pour recevoir du GET, POST et COOKIE en meme temps pour faire d'un seul coup mes tests ????

Merci pour ton aide Hubert Roksor.

par Hubert Roksor » 27 janv. 2006, 19:54

Je viens de vérifier l'API de filter, effectivement c'est relativement logique que input_get() ne fonctionne pas comme on le souhaiterait. Utilise filter_data() à la place.

par zigz4g » 27 janv. 2006, 18:47

Desoler de te decevoir mais a priori, si tu essaye de mettre une nouvelle
valeur dans une variable non initialiser comme $_GET, $_POST, etc...
PHP refuse d'affecter la valeur comme si elle venait d'un reel formulaire recut.

Avec tout ce qui vient de se dire, je penses a plusieurs cas ou l'erreur peut provenir :
1) C'est php qui ne veut pas faire cette initialisation pour eviter des trous de securites.
2) L'extension Filter de PECL n'arrive pas a recuperer la valeur de $_GET dans le seul cas ou c'est moi qui essaye de l'initialiser sans aucunes receptions de formulaires.
3) Dans le cas ou je recois bien un formulaire et que je changes la valeur par une autre Filter de PECL veut bien la prendre en compte.

Du style je recoits : $_GET['test'];
$_GET['test'] = 'nouvelle_valeur';
filter(1, 'test'); <--- me retourne bien nouvelle_valeur.

Je ne vois pas d'autre idees pour le moment, je cherches toujours une solution mais je penses que c'est un probleme de securite qui nous empeche de creer de nouvelles variables $_GET ou POST si l'on ne recoit pas un formulaire.

par Hubert Roksor » 27 janv. 2006, 18:30

En fait c'est simple, à partir du moment où tu utilises une version récente (moins de deux ans ;)) de PHP, toutes les super globales sont des tableaux comme un autre. Tu peux les modifier à loisir --y compris y ajouter de nouveaux éléments-- et les modifications seront visibles partout dans ton script.

Je n'ai pas vérifié mais cela devrait include toutes les super globales à l'exception de $_SESSION. Donc $_GET, $_POST, $_COOKIE, $_SERVER et probablement $_ENV.

par zigz4g » 27 janv. 2006, 18:22

Merci pour cette reponse.

Peux tu approfondir ta reponse sur la creation/simulation d'un formulaire POST ?

Dans le cas ou je peux reussir a simuler un formulaire je penses generer
des tests sur les variables. Par contre aurais-je le droit de creer autant de variable que je le desires. Je veux pouvoir tester un formulaire dans toutes les conditions qui concerne les inputs, select, etc... de l'html.

Ma question porte aussi sur les cookies.

Merci pour le debut de recherche.

par Hubert Roksor » 27 janv. 2006, 18:17

Il est vrai que tu ne peux pas créer $_GET, mais s'il existe déjà c'est un tableau comme un autre, donc tu devrais pouvoir t'en servir pour simuler des variables passées dans l'URL. Pour les autres superglobals c'est pareil, tu peux même faire $_SERVER['REQUEST_METHOD'] = 'POST' pour simuler un formulaire POST.
<?php

$_GET['foo'] = 'bar';
test();

function test()
{
	print_r($_GET);
}
?>

par zigz4g » 27 janv. 2006, 18:06

Oui mais dans ce cas la PHP ne considere pas ma variable comme une super globale venant d'un formulaire.

Normallement, si je ne me trompe pas, il n'est pas possible de creer des super globales comme si elle venait d'un formulaire.

Je pose cette question car je compte utiliser Filter de PECL.

par Hubert Roksor » 27 janv. 2006, 18:01

Je ne vois pas où est le problème, le bout de code que tu as donné fonctionne parfaitement et $_GET['untest'] contient bien la chaîne que tu lui as assigné. Aurais-je manqué quelque chose ?

SimpleTest php5 et les super globales

par zigz4g » 27 janv. 2006, 17:29

Salut tout le monde.

Je cherches a faire des tests unitaires avec le framework SimpleTest.
Mes premiers essaies son tres concluant mais je cherches maintenant a faire
mes tests unitaires sur la gestion des variables que me retourne un formulaire.

Bien sur, je ne veux pas tester uniquement un type de formulaire (juste GET), mais faire ces tests sur toutes les super globales ($_[GET|POST|SERVER...]).

Normallement PHP n'autorise pas de creer une super globale a la voler. Je veux dire par la que je ne peux pas ce genre de code :
<?php
    $_GET['untest'] = 'Je veux setter cette variable.';
    echo '$_GET[\'untest\'] = '.$_GET['untest'];
?>
Ce bout de code est appeler directement sans passer par un formulaire.
Je veux donc trouver une petite solution pour faire des tests sur ces variables sans faire de formulaire.

Bon je suis conscients que ce que je demandes n'est pas tres realiste.
Si quelqu'un a une petite idee pour pallier a ce probleme.
Merci pour votre aide.