Hébergement du site en PHP et Mysql par WDMédia-hébergement
Vous aussi adpotez les éléPHPants de Vincent Pontier !  
CONCOURS
 
 
PLUS DE PHP
 
 
PLUS DE JAVASCRIPT
 
COMMENT CA MARCHE
 
 
EXPLIQUE-MOI
 
 
NEWS LETTER
 

 
PARTENAIRES
 
Découvrez scriptsphp.org
Découvrez phpteam.net
Tout sur les expressions régulières
IE sucks :-)
 
DESIGN DU SITE
 
Variables auto-déclarées : Pourquoi c'est mal ?

Une caractéristique qui a fait le bonheur de nombreux développeurs PHP est la déclaration automatique des variables. Mais les temps changent et désormais, il est recommandé de ne pas utiliser cette fonctionnalité !

On parle de quoi là ?

Vous savez, lorsque vous créez par exemple un cookie dont le nom est "utilisateur", sur toutes les pages de votre site, vous pouvez utiliser directement la variable $utilisateur qui est automatiquement créée par PHP à l'initialisation du script. Il en va de même pour les données transmises dans les liens, les formulaires ou les sessions. C'est très pratique, et surtout extrêmement simple à utiliser.

Cette fonctionnalité qui existe depuis la création de PHP est actuellement remis en cause et désormais le paramètre de configuration "register_globals" est à "off". Cela implique que les variables ne sont plus déclarées automatiquement et vous devez accéder aux tableaux $_GET, $_POST, $_COOKIE, $_SESSION, etc. afin de traiter vos données.

Pourquoi avoir fait une telle chose ?

Tout simplement à cause de notre bêtise ! Oui, vous .. moi .. nous tous avons usé et abusé par le passé de cette fonctionnalité sans toujours trop réfléchir, et nous avons engendré des anomalies et autres trous de sécurité par manque de discernement !

Heu .. je ne comprends pas bien là !

Si je fais "echo $utilisateur;", d'où vient cette variable ? De la session ? D'un formulaire ? D'un cookie ? C'est une variable locale ? En fait, rien ne permet de connaître sont origine et si par distraction, vous partez par exemple du postulat que votre variable est locale, vous risquez de bien mauvaises surprises.

Voici un petit exemple. En voulant bien faire, on a séparé la partie traitement de la partie présentation, ce qui nous donne ceci :

Admin.php
<?php
if( $login == 'admin' and $pass == 'passadmin' ) {
  
$admin = true;
} else {
  
$admin = false;
}
require
'affichage/affichage.inc.php';
?>

affichage.inc.php (dans un répertoire "affichage" protégé par un .htaccess, mais on a oublié de le mettre !)
<?php
if( $admin == true ) {
  echo
'Phrase secrète réservée à l\'administrateur';
}
?>

Dans cette situation, si on utilise l'URL suivante :
http://www.monsite.com/affichage/affichage.inc.php?admin=1
La phrase secrète s'affiche !

Cela peut vous paraître trivial, mais de nombreux trous de sécurité étaient basés sur ce principe.

En fait, register_globals à "on" n'est pas un trou de sécurité, mais il les favorise si l'on n'est pas attentif.

Le danger est d'autant plus grand avec les sessions car normalement, l'utilisateur ne peut pas modifier leur contenu. Dans le cas de pages réservées aux membres, au lieu de redemander l'identifiant et le mot de passe à chaque fois, on place une donnée en session indiquant que la personne est authentifiée. Seulement, si on n'utilise pas le tableau $_SESSION, mais directement une variable auto-déclarée, vous vous exposez au risque qu'un utilisateur déclare cette donnée dans l'URL de la page.

C'est très pénible de devoir écrire $_SESSION['xxxx'] !

Oui, mais disons que c'est pour notre bien et aussi parce que nous l'avons bien cherché en développant des scripts bourrés de fautes d'inattention.

Si je dois changer mes vieux scripts, je vais avoir trop de boulot !

Je suis entièrement d'accord avec vous, mais ce n'est pas une raison pour continuer les nouveaux développements avec les variables auto-déclarées. Laissez le register_globals à "on" pour que vos vieux scripts fonctionnent encore, mais faites comme s'il était à "off".

Remarque : Pour les sessions, vous devez obligatoirement utiliser le tableau $_SESSION et ne plus jamais faire appel à session_register car cette fonction permet justement de déclarer automatiquement les variables de sessions, ce qui entre en conflit avec le register_globals à "off".


Revenir aux mises au point



Ajouter une réponse
Nom
Email
Titre

Mise en forme : gras = [b]...[/b], italic = [i]...[/i], souligné = [u]...[/u], citation = [quote]...[/quote], lien = [url]liens_externe[/url] ou [url nom=texte]liens_externe[/url], code source : [code]...[/code]

Mémoriser mon nom et mon email : Oui Non
www.phpdebutant.org © 2017 - L'équipe de phpDebutant - Hébergement : WDMédia-hébergement
DEBUTEZ !
 
  0.  Introduction
  1.  Afficher une phrase ou une image
  2.  Afficher la date et l'heure
  3.  PHP dans du code HTML
  4.  La concaténation
  5.  Récupérer les valeurs d'un formulaire
  6.  Les structures de contrôle
  7.  Ecrire et lire dans un fichier texte
  8.  Les fonctions utilisateurs
  9.  Les variables d'environnement
  10.  Quelques fonctions utiles
  11.  SQL/MySQL (Create, Alter & Drop)
  12.  SQL/MySQL (Insert et Select)
  13.  SQL/MySQL (Delete et Update)
  14.  SQL/MySQL (Where)
  15.  Fonctions PHP pour mySQL
  16.  Interroger une table MySQL
  17.  Alimenter une ou plusieurs tables mySQL
  18.  Les pseudos-frames
  19.  Les sessions php4
  20.  Affichage page par page
  21.  Images dynamiques
  22.  Ca marche pas ?
  23.  Variables globales à OFF
  24.  Les variables dynamiques