Services webmasters
Partenaires
Jeux concours gratuits
 
Rapport d'erreurs
<<<
Utilisation des variables super-globales Données transmises par les internautes
>>>

5.1 Sécurité
5 Sécurité
 Manuel PHP

Considérations générales
Binaires CGI
Module Apache
Sécurité des fichiers
Sécurité des bases de données
Rapport d'erreurs
->Utilisation des variables super-globales
Données transmises par les internautes
Masquer PHP
Etre à jour

5.1.7 Utilisation des variables super-globales

Une fonctionnalité de PHP qui peut être utilisée pour améliorer la sécurité est de configurer PHP en désactivant 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.
Travailler avec register_globals = on

<?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.php");
}
?>
Travailler avec register_globals = off

<?php
  
if($_COOKIE["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.php");
  }
?>
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.
Détection de corruption de variables

<?php
  
if ($_COOKIE['username'] &&
      !
$_POST['username'] &&
      !
$_GET['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.php");
  } else {
   
mail("admin@example.com", "Tentative de piratage", $_SERVER['REMOTE_ADDR']);
   echo
"Problème de sécurité, l'administrateur est alerté.";
   exit;
  }
?>
Bien entendu, désactiver 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.

<< Utilisation des variables super-globales >>
Rapport d'erreurs Sécurité Données transmises par les internautes
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -