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.