Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2010, 14h23   #1
Nouveau Membre du Club
 
Inscription : novembre 2007
Messages : 43
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : novembre 2007
Messages : 43
Points : 32
Points : 32
Par défaut Récupération "automatique" des $_POST $_GET. C'est bien ou mal ?

Bonjour à tous,

J'utilise depuis quelques semaines un fichier que j'inclus dans mes scripts qui doivent récupérer des données depuis les tableaux super globaux.

Ce bout de code me fait les htmlentities et initialise les variables en fonction du nom utilisé.
Cela m'évite l'étape fastidieuse de la récupération des variables une à une. Je gagne vraiment du temps.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
/* Filtre $_POST */
if ( !empty( $_POST ) ) {
	foreach( $_POST as $key => $data ) { //Parcours le tableau
		$data = trim( $data ); //Supprime les espaces
		$data = htmlentities( $data, ENT_QUOTES, 'UTF-8' ); //Remplace les caractères interprétables
		$key = htmlentities( $key, ENT_QUOTES, 'UTF-8' ); //Remplace les caractères interprétables
		${ $key } = $data;
		}
	}
 
/* Filtre $_GET */
if ( !empty( $_GET ) ) {
	foreach( $_GET as $key => $data ) { //Parcours le tableau
		$data = trim( $data ); //Supprime les espaces
		$data = htmlentities( $data, ENT_QUOTES, 'UTF-8' ); //Remplace les caractères interprétables
		$key = htmlentities( $key, ENT_QUOTES, 'UTF-8' ); //Remplace les caractères interprétables
		${ $key } = $data;
		}
	}
 
/* Filtre $_FILE */
if ( !empty( $_FILE ) ) {
	foreach( $_FILE as $key => $data ) { //Parcours le tableau $_POST
		$data = trim( $data ); //Supprime les espaces
		$data = htmlentities( $data, ENT_QUOTES, 'UTF-8' ); //Remplace les caractères interprétables
		$key = htmlentities( $key, ENT_QUOTES, 'UTF-8' ); //Remplace les caractères interprétables
		${ $key } = $data;
		}
	}
Jusqu'ici cela marche bien mais je me demandais si c'etait vraiment une bonne chose.
- Bien sur, il faut faire gaffe de ne pas utiliser des noms de variables qui peuvent être créé par ce script.
- Un attaquant pourrais surcharger les superglobal aussi (je ne sais pas si ce type d'attaque est courante)

Donc ma question est :
Est-ce que je continu à procéder comme ça ?
Ou est-ce que je me plante devrai arrêter ?
greg91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 14h44   #2
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Ce que tu fait reviens à utiliser (à peut de chose près) register_global on qui est fortement déconseillé (voir même supprimé des dernière version de PHP).

Je prend un exemple simple , dans ton site tu as par exemple :

Code :
1
2
3
4
if($admin == 1)
   donation_grunk(5000);
else
   echo ' vous devez être admin';
Suffit qu'un utilisateur appel cette page avec l'argument &admin=1 et op il passer outre la protection.
C'est un cas un peu exagéré mais avec ce que tu fais n'importe qui peut intéragir avec ton script.

Ce qu'il est en revanche possible de faire c'est par exemple appliqué un traitement sécurisant certaines données via array_walk.

Note : htmlentites se fait à l'affichage pas avant traitement , ou insertion bdd
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 14h52   #3
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
La seule chose qui me vient à l'esprit c'est:

Quelqu'un peut envoyer des données POST/GET que tu n'as pas dans tes scripts à la base et toi tu les traiteras automatiquement alors que tu ne les utiliseras pas.

Autant faire une fonction qui nettoie directement ta variable. (une par une)
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h04   #4
Nouveau Membre du Club
 
Inscription : novembre 2007
Messages : 43
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : novembre 2007
Messages : 43
Points : 32
Points : 32
Citation:
Autant faire une fonction qui nettoie directement ta variable. (une par une)
Oui c'est comme cela que je faisait mais je pensais gagner du temps.

Citation:
Ce que tu fait reviens à utiliser (à peut de chose près) register_global on
Effectivement je n'avait pas vue les choses comme ça !

J'avais fais ça pour un formulaire dont je ne connaissait pas le nombre de champs (paramétrable par l'utilisateur). Je me suis cru très malin mais je me trompais

Merci pour vos réponses.
greg91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h31.


 
 
 
 
Partenaires

Hébergement Web