OVH Cloud OVH Cloud

$_REQUEST securite ?

15 réponses
Avatar
jpll
bonjour à tous,
J'ai cru lire dans un post qq part ici que $_REQUEST pouvait mettre à mal la
sécurité.
Qu'en est-il exactement ? ( j'ai un peu tendance à l'utiliser...
beaucoup ). Je pensais que les superglobales accroissaient le niveau de la
sécurité.
merci.

5 réponses

1 2
Avatar
Laurent Seguin
Thibaut Allender , le
29 mai 2004 17:04:54, écrivait ceci:

Mais de même, si tu remplaces par if($_COOKIES['authenticate']==1) il
suffit de modifier le cookie... Donc il n'y a pas plus de sécurité en
écrivant ça qu'en écrivant if($_REQUEST['authenticate']==1) je dirais
même que justement, on aura plus tendance à détecter cette **faille** de
sécurité de conception (on ne fait pas plus confiance au contenu d'un
cookie qu'à une variable arrivant d'un formulaire) en lisant qu'on est
en train de faire confiance à une variable de _REQUEST qui indique bien
la provenance du monde extérieur (donc potentiellement traffiquée).


d'autant plus qu'il faut savoir que la variable s'appelle "authenticate"
sans access aux sources, bon courage ;)


Ah bon ?

alors que dans le cookie, on voit clairement son nom


Heuu que ce soit transmis en COOKIE, GET ou en POST on voit aussi très
clairement le nom...

Exemple, ton formulaire de contact (j'ai mis une adresse invalide exprès
pour que ca ne poste pas) me donne :

----------------------------------------------------------
http://capsule.org/fr/contact/#formulaire

POST /fr/contact/ HTTP/1.1
Host: capsule.org
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6)
Gecko/20040206 Firefox/0.8
Accept: application/x-shockwave-
flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/p
lain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: fr,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://capsule.org/fr/contact/
Cookie: PHPSESSID 6a2db400d2d79f108bc7ec6386fd77
Content-Type: application/x-www-form-urlencoded
Content-Length: 118
nom=Laurent&email=laurent-chez-
alussian.org&objet=test&message=j%27envois+des+donn%E9es+via+ton+formulaire
&submitted=1

HTTP/1.x 200 OK
Date: Sat, 29 May 2004 15:57:09 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4
X-Powered-By: PHP/4.3.4
Set-Cookie: PHPSESSID 6a2db400d2d79f108bc7ec6386fd77; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-
check=0
Pragma: no-cache
Content-Type: text/html
Connection: close
----------------------------------------------------------

La j'ai non seulement le nom de la varibale du cookie mais également sa
valeur (même pas besoin d'aller fouiller). En plus ca me le rebalance au
lieu de le relire :-/...

Mais (et c'est la le plus intéréssant), j'ai aussi ce que j'ai transmis par
ton formulaire :
Content-Type: application/x-www-form-urlencoded
Content-Length: 118
|_nom=Laurent&
|_email=laurent-chez-alussian.org&
|_objet=test&message=j%27envois+des+donn%E9es+via+ton+formulaire&
|_submitted=1


La même chose en GET :

----------------------------------------------------------
http://capsule.org/fr/contact/?message=j%27envois+des+donn%E9es+via+ton+for
mulaire&nom=Laurent&email=laurent-chez-
alussian.org&objet=test&submitted=1#formulaire

GET
/fr/contact/?message=j%27envois+des+donn%E9es+via+ton+formulaire&nom=Lauren
t&email=laurent-chez-alussian.org&objet=test&submitted=1 HTTP/1.1
Host: capsule.org
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6)
Gecko/20040206 Firefox/0.8
Accept: application/x-shockwave-
flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/p
lain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: fr,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://capsule.org/fr/contact/
Cookie: PHPSESSID 6a2db400d2d79f108bc7ec6386fd77
----------------------------------------------------------

Bref pas hyper difficie de voir ce qui se *trame* :-)


Avatar
Thibaut Allender

d'autant plus qu'il faut savoir que la variable s'appelle "authenticate"
sans access aux sources, bon courage ;)


Ah bon ?


Je parle de l'exemple de john :

if(!$authenticate) exit("erreur login/pass);

il faut savoir qu'il faut passer ?authenticate=1 en GET pour cracker le
systeme
cette variable $authenticate n'apparait nulle par en get/post/cookie

donc, danger, certes, mais relatif, puisqu'il faut "deviner" le nom de
la variable a passer pour contourner le systeme

alors que dans le cookie, on voit clairement son nom



Heuu que ce soit transmis en COOKIE, GET ou en POST on voit aussi très
clairement le nom...


je sais, je comparais get/post/cookie au danger relatif de l'utilisation
de register_globals on

Bref pas hyper difficie de voir ce qui se *trame* :-)


j'ai jamais dit le contraire
mais comme tu m'as mal compris, tu essayes de demontrer qq chose que je
sais deja :)

ceci dit, en GET tu ne pouvais pas valider le formulaire parce que
j'utilise les variables $_POST ;))

--
thibaut allender | freelance | web|system developer|designer
+32 496 26 75 76 | http://capsule.org *new version*


Avatar
Laurent Seguin
Thibaut Allender , le
29 mai 2004 22:33:43, écrivait ceci:

Bref pas hyper difficie de voir ce qui se *trame* :-)


j'ai jamais dit le contraire mais comme tu m'as mal compris,


Oui apparement.

tu essayes de demontrer qq chose que je sais deja :)


J'me disais aussi... Je trouvais bizzare venant de toi :-)

ceci dit, en GET tu ne pouvais pas valider le formulaire parce que
j'utilise les variables $_POST ;))


J'ai vu ca quand j'ai fais mon test en GET, les données que j'avais mises
ne se pas remise dans le formu.

Remarque dans ce cas précis (formulaire de contact), il y a un avantage de
passer par $_POST : Éviter de traiter les liens avec les param qui se
promènenent partout (si si j'en ai vu qui jouaient à ca et qui s'amusaient
à les envoyer par mail ou les référencer dans un moteur de recherche).
C'est un des rares cas (exception faite de $_FILES) ou j'utilise $_POST
plutôt que $_REQUEST.


Avatar
Thibaut Allender

tu essayes de demontrer qq chose que je sais deja :)


J'me disais aussi... Je trouvais bizzare venant de toi :-)


j'en rougis presque :)

Remarque dans ce cas précis (formulaire de contact), il y a un avantage de
passer par $_POST : Éviter de traiter les liens avec les param qui se
promènenent partout (si si j'en ai vu qui jouaient à ca et qui s'amusaient
à les envoyer par mail ou les référencer dans un moteur de recherche).


des liens avec params get qui provoquent la soumission du form de contact ?
roohh, c'est vicieux ca

C'est un des rares cas (exception faite de $_FILES) ou j'utilise $_POST
plutôt que $_REQUEST.


oui enfin, tu fais une petite page avec un form post, et un submit
automatique en javascript, tu peux aussi t'amuser a faire ch*** le monde
de la meme maniere
et si tu t'y connais un peu en php, tu peux meme generer une requete
post avec les sockets ou curl...

tout ca pour dire que la sécurité du $_POST, c'est vraiment bidon, meme
si effectivement, comme tu le dis ici, ca permet de rendre un tout petit
peu plus difficile la vie des emmerdeurs

--
thibaut allender | freelance | web|system developer|designer
+32 496 26 75 76 | http://capsule.org *new version*


Avatar
Laurent Seguin
Thibaut Allender ,
le 30 mai 2004 03:05:55, écrivait ceci:

Remarque dans ce cas précis (formulaire de contact), il y a un
avantage de passer par $_POST : Éviter de traiter les liens avec les
param qui se promènenent partout (si si j'en ai vu qui jouaient à ca
et qui s'amusaient à les envoyer par mail ou les référencer dans un
moteur de recherche).


des liens avec params get qui provoquent la soumission du form de
contact ? roohh, c'est vicieux ca


Oui hein ? Bon c'est vite fait de s'en prémunir (changement du nom d'un
param par ex) mais bon, encore faut il en trouver la cause la première fois
que ca t'arrive (quand tu vois un googlebot, t'as capté).

C'est un des rares cas (exception faite de $_FILES) ou j'utilise
$_POST plutôt que $_REQUEST.


oui enfin, tu fais une petite page avec un form post, et un submit
automatique en javascript, tu peux aussi t'amuser a faire ch*** le
monde de la meme maniere
et si tu t'y connais un peu en php, tu peux meme generer une requete
post avec les sockets ou curl...


Sauf qu'avec ce genre de méthodes, tu n'as plus une multitude d'IP mais une
seule et avec une seule IP, on peu jouer...


1 2