Utilisation des variables HTTP

Une fonctionnalité de PHP qui peut être utilisée pour améliorer la sécurité est de configurer PHP en inactivant l ' option register_globals . En supprimant la possibilité que les variables envoyées par les internautes soient injectées automatiquement dans le script PHP , vous pouvez restreindre la quantité de variables non-protégées . Les intrus devront prendre beaucoup plus de temps pour corrompre les mécanismes d ' envoi de données , et vos variables internes seront nettement mieux protégées .

Bien que cela augmente d ' autant les efforts à fournir pour écrire un script PHP , les bénéfices peuvent en être nettement plus interessants .

Exemple 5-8 . Travailler avec register_globals actif

 
?php

 
if

 
(

 
$username

 
)

 
{

 
/

 
/

 
attention

 
,

 
cette

 
valeur

 
peut

 
être

 
parasitée

 
via

 
GET

 
/

 
POST

 
/

 
COOKIES

 
$good_login

 
=

 
1

 
;

 
  }

 
if

 
($good_login

 
==

 
1

 
)

 
{

 
/

 
/

 
attention

 
,

 
cette

 
valeur

 
peut

 
être

 
parasitée

 
via

 
GET

 
/

 
POST

 
/

 
COOKIES

 
fpassthru

 
("

 
/

 
données

 
/

 
très

 
/

 
très

 
/

 
sensibles

 
/

 
index.html")

 
;

 
}

 
?



Exemple 5-9 . Travailler avec register_globals actif

 
?php

 
if(

 
$HTTP_COOKIE_VARS["username"])

 
{

 
/

 
/

 
ne

 
peut

 
provenir

 
que

 
d'un

 
cookie

 
,

 
corrompu

 
ou

 
pas

 
$good_login

 
=

 
1

 
;

 
/

 
/

 
Impossible

 
à

 
parasiter

 
fpassthru

 
("

 
/

 
données

 
/

 
très

 
/

 
très

 
/

 
sensibles

 
/

 
index.html")

 
;

 
  }

 
?



En utilisant intelligemment ceci, il est même possible de détecter les tentatives de corruption. Si vous savez à l'avance d'où la variable doit venir (GET ou POST ou COOKIE), vous pouvez tester les données. Même si cela ne vous garantit pas contre la corruption de ces données, cela impose aux pirates de bien savoir comment corrompre les données.

Exemple 5-10 . Détection de corruption de variables

 
?php

 
if

 
(

 
$HTTP_COOKIE_VARS['username'

 
]

 
!$HTTP_POST_VARS['username'

 
]

 
!$HTTP_GET_VARS['username'

 
]

 
)

 
{

 
/

 
/

 
D'autres

 
vérifications

 
pour

 
vérifier

 
l'origine

 
du

 
nom

 
d'utilisateur

 
fourni

 
$good_login

 
=

 
1

 
;

 
fpassthru

 
("

 
/

 
données

 
/

 
très

 
/

 
très

 
/

 
sensibles

 
/

 
index.html")

 
;

 
}

 
else

 
{

 
mail("admin@example.com"

 
,

 
"Tentative

 
de

 
piratage"

 
,

 
$HTTP_SERVER_VARS['REMOTE_ADDR'])

 
;

 
echo

 
"Problème

 
de

 
sécurité

 
,

 
l'administrateur

 
est

 
alerté

 
."

 
;

 
exit

 
;

 
  }

 
?



Bien entendu, inactiver l'option register_globals ne signifie pas que votre code devient ouvert à tous. Mais il faut aussi vérifier toutes les données qui vous sont fournies par les utilisateurs, et plutôt deux fois qu'une.