Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
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 12/03/2006, 21h49   #1
Candidat au titre de Membre du Club
 
Inscription : août 2003
Messages : 29
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 29
Points : 14
Points : 14
Par défaut [Sécurité] [Optimisation] Sécurisation des Variables POST et GET

Voila j'ai crée un script pour sécuriser les variables pouvant être modifiées manuellement par un utilisateur.
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
function secure($nomvar,$type)
{
	if($type == 'post')
	{
		$var = $_POST[$nomvar];
		$_POST[$nomvar] = &$var;
		$var = str_replace('\'', '\\\'',$var);
		$var = str_replace('#', '', $var);
		$var = str_replace('<', '&lt;', $var);
		$var = str_replace('[', '', $var);
		$var = str_replace(']', '', $var);
		$var = str_replace('`', '', $var);
		$var = str_replace('\\', '', $var);
	}
	elseif($type == 'get')
	{
		$var = $_GET[$nomvar];
		$_GET[$nomvar] = &$var;
		$var = str_replace('\'', '\\\'',$var);
		$var = str_replace('#', '', $var);
		$var = str_replace('<', '&lt;', $var);
		$var = str_replace('[', '', $var);
		$var = str_replace(']', '', $var);
		$var = str_replace('`', '', $var);
		$var = str_replace('\\', '', $var);
	}
 
}
Je voudrais savoir si il y avait des améliorations possibles sur le traitement de ma variable, si j'avais oublié des choses ou autres.

Merci d'avance pour votre aide.
CritikKiller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 22h33   #2
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
et pourquoi tu fais tout ca ??

htmlentities()

addslashes() et stripslashes()

voila.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 22h46   #3
Candidat au titre de Membre du Club
 
Inscription : août 2003
Messages : 29
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 29
Points : 14
Points : 14
Jme disais bien que c'était un peu long comme code

Mici

Edit :

Donc en gros ca donnerait quelque chose comme ca :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function secure($nomvar,$type)
{
	if($type == 'post')
	{
		$var = $_POST[$nomvar];
		$_POST[$nomvar] = &$var;
		$var = htmlentities ($var);
		$var = addslashes ($var);
	}
	elseif($type == 'get')
	{
		$var = $_GET[$nomvar];
		$_GET[$nomvar] = &$var;
		$var = htmlentities ($var);
		$var = addslashes ($var);
	}
 
}
?>
CritikKiller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 23h46   #4
Membre émérite
 
Avatar de macbook
 
Inscription : février 2006
Messages : 840
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 840
Points : 924
Points : 924
Ecraser l'environnement global est parfois une bonne idée.
Fais une recherche sur le Poka-Yoké.
__________________
Consultant idéaliste.
macbook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 10h03   #5
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
@macbook : Ça en impose plus si on l'écrit correctement
ポカヨケ

@CritikKiller : Pourquoi ne pas faire un return dans ta fonction ?
Sérieusement, le sujet a été traité maintes fois. Regarde la doc de mysql_real_escape_string(), ils y donnent une fonction intéressante. Ensuite, à l'affichage seulement, utilise htmlentities().
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 10h04   #6
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
Desolé de squatter ce sujet...
J'ai du mal a comprendre l'interet de securiser les variables GET et POST
Car ces variables ne sont pas là par hasard... et heuh... non je ne vois pas pourquoi
Merci de m'éclairer sur ce sujet

++
ShinJava
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 10h06   #7
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
@ShinJava : Normalement, ce ne sont pas les variables elles-mêmes que nous cherchons à modifier mais leur valeur avant de les utiliser dans une requête. Renseigne-toi sur l'injection SQL.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 10h09   #8
Membre émérite
 
Avatar de macbook
 
Inscription : février 2006
Messages : 840
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 840
Points : 924
Points : 924
Citation:
Envoyé par Kirkis
@macbook : Ça en impose plus si on l'écrit correctement
ポカヨケ
Mande pardon ????
__________________
Consultant idéaliste.
macbook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 13h39   #9
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
Citation:
Envoyé par Kirkis
@ShinJava : Normalement, ce ne sont pas les variables elles-mêmes que nous cherchons à modifier mais leur valeur avant de les utiliser dans une requête. Renseigne-toi sur l'injection SQL.

Houla ! Merci, j'ai commencé à chercher des infos dessus et ca fait peur !
*s'en va verifier son code*

merci

++
ShinJava
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 13h58   #10
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
@macbook : Peut-être ne vois-tu pas les caractères japonais, peu importe.

@ShinJava : Renseigne-toi sur toutes les injections, tant que tu y es !
Au passage : http://thierrylhomme.developpez.com/php/php_secure/
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 14h11   #11
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
Citation:
Envoyé par Kirkis
@macbook : Peut-être ne vois-tu pas les caractères japonais, peu importe.

@ShinJava : Renseigne-toi sur toutes les injections, tant que tu y es !
Au passage : http://thierrylhomme.developpez.com/php/php_secure/
Houla merci, entre temps j'ai lu l'article de PHP Secure, ma vision sur les requetes SQL à completement changé ! Je vais faire des test beaucoup plus poussé, interdire certains caractères (meme des mots !) , voir meme limité la taille de certains GET/POST...
Bah dit donc j'ai bien fais d'etre passé par ce sujet.
Merci beaucoup !

Sinon j'arrive pas a lire les caracteres japonais aussi : o

++
ShinJava
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 14h12   #12
Membre éclairé
 
Avatar de XtofRoland
 
Inscription : août 2005
Messages : 361
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 361
Points : 340
Points : 340
peux ton provoquer des erreurs, en mofiant un formulaire?

par exemple en creant un input type=text name="$login"
qui créerait un variable $_POST['$login'] ... ou qqc de similaire?
__________________
Le but de tout developpeur OO est de devenir une référence.
Mon avatar est un ambigramme, les curieux peuvent le retourner ;-)
Aider <> Faire a la place de!!!
XtofRoland est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 16h52   #13
Candidat au titre de Membre du Club
 
Inscription : août 2003
Messages : 29
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 29
Points : 14
Points : 14
Citation:
@CritikKiller : Pourquoi ne pas faire un return dans ta fonction ?
C'est à dire ca :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
function secure($nomvar,$type)
{
   if($type == 'post')
   {
      $var = $_POST[$nomvar];
      $_POST[$nomvar] = &$var;
      $var = htmlentities ($var);
      $var = addslashes ($var);
      return($var);
   }
   elseif($type == 'get')
   {
      $var = $_GET[$nomvar];
      $_GET[$nomvar] = &$var;
      $var = htmlentities ($var);
      $var = addslashes ($var);
      return($var);
   }
 
}
?>
Je ne vois pas l'interet du return en faite... Le code php après n'est pas lu?
CritikKiller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 17h00   #14
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Et si la variable derriere $_POST[$nomvar] est un tableau ?
Pourquoi appliquer htmlentities avant d'insérer en base ?
Pourquoi appliquer addslashes avant d'afficher sur le navigateur ?
Pourquoi appliquer addslashes qui ne sera pas suffisant pour certains moteurs de recherche (comme mysql par exemple) ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 17h22   #15
Candidat au titre de Membre du Club
 
Inscription : août 2003
Messages : 29
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 29
Points : 14
Points : 14
Citation:
Envoyé par Mr N.
Et si la variable derriere $_POST[$nomvar] est un tableau ?
Dans mon cas, les données qui transitent sont des variables envoyées par un formulaire.

Citation:
Envoyé par Mr N.
Pourquoi appliquer htmlentities avant d'insérer en base ?
Que ca soit fait avant ou après ca revient en meme. (Enfin c'est vrai qu'après ca pourrait être plus judicieux dans certains cas)

Citation:
Envoyé par Mr N.
Pourquoi appliquer addslashes avant d'afficher sur le navigateur ?
C'est pas pour afficher sur le navigateur, mais pour pouvoir les traiter sans risques (Injection SQL par exemple...)

Citation:
Envoyé par Mr N.
Pourquoi appliquer addslashes qui ne sera pas suffisant pour certains moteurs de recherche (comme mysql par exemple) ?
La je ne comprends pas ce que tu veux dire par contre.
CritikKiller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 17h34   #16
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
Envoyé par CritikKiller
Citation:
Envoyé par Mr N.
Et si la variable derriere $_POST[$nomvar] est un tableau ?
Dans mon cas, les données qui transitent sont des variables envoyées par un formulaire.
Je ne vois pas le rapport. Les données d'un formulaire peuvent très bien arriver sous forme de tableau, suivant comment tu nommes tes champs.
Citation:
Envoyé par CritikKiller
Citation:
Envoyé par Mr N.
Pourquoi appliquer htmlentities avant d'insérer en base ?
Que ca soit fait avant ou après ca revient en meme. (Enfin c'est vrai qu'après ca pourrait être plus judicieux dans certains cas)
Non ca revient pas au même puisque tu va te retrouver avec des entités dans ta base et du coup les recherche seront légèrement plus difficile. De plus le contenu d'une base n'est pas forcément à destination de html, donc des entités n'ont pas forcément lieu de s'y trouver.
Citation:
Envoyé par CritikKiller
Citation:
Envoyé par Mr N.
Pourquoi appliquer addslashes avant d'afficher sur le navigateur ?
C'est pas pour afficher sur le navigateur, mais pour pouvoir les traiter sans risques (Injection SQL par exemple...)
Oui, mais une donnée qui provient d'un formulaire peut très bien être affichées sur un écran intermédiaire de confirmation par exemple. Du coup le addslashes n'est pas pertinent.
Citation:
Envoyé par CritikKiller
Citation:
Envoyé par Mr N.
Pourquoi appliquer addslashes qui ne sera pas suffisant pour certains moteurs de recherche (comme mysql par exemple) ?
La je ne comprends pas ce que tu veux dire par contre.
Tout simplement que addslashes n'est pas suffisant pour se prémunir des injections SQL sous mysql. Chaque moteur pocède ses caractères d'échappements, et addslashes n'est pas suffisant dans tous les cas.
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 17h40   #17
Candidat au titre de Membre du Club
 
Inscription : août 2003
Messages : 29
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 29
Points : 14
Points : 14
Citation:
Tout simplement que addslashes n'est pas suffisant pour se prémunir des injections SQL sous mysql. Chaque moteur pocède ses caractères d'échappements, et addslashes n'est pas suffisant dans tous les cas.
C'est à dire?

Et que me propose tu comme solution alors pour eviter les injections SQL et les attaques XSS? Le Poka Yoké? (je suis en train de lire l'article)
CritikKiller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 17h48   #18
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Deux types d'attaques différentes == deux méthodes de protection différentes.
pour XSS, htmlentities (a priori et ca dépend des cas)
pour SQL, ca dépend de ton moteur. Si c'est MySQL alors mysql_real_escape_string sera sufffisant dans 99% des cas.

Sinon l'article de pokatruc je l'ai pas encore lu donc je ne peux rien dire dessus...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 18h04   #19
Candidat au titre de Membre du Club
 
Inscription : août 2003
Messages : 29
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 29
Points : 14
Points : 14
Par contre je suis sur la doc de la fonction :
mysql_real_escape_string()

Mais je n'arrive pas à comprendre les arguments :
mysql_real_escape_string(MYSQL *mysql, char *en, const char *de, unsigned long longueur)

[MYSQL *mysql] : ?
[char *en] : ?
[const char *de] : ?
[unsigned long longueur] : ?

Si on pouvait m'éclairer, merci d'avance.
CritikKiller est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2006, 18h12   #20
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Gné ? Quelle doc ? apparemment tu t'es trompé de bible
http://g-rossolini.developpez.com/tu...ncepts#LVI-D-6
Mr N. 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 17h02.


 
 
 
 
Partenaires

Hébergement Web