PHP

Fuck you register_globals

Je suis newbie dans le développement web. Étudiante, j’ai quand même du faire un site perso, sorte de portfolio, pour présenter les sites que j’ai déjà faits, montrer à ma maman que je sais créer des trucs avec un clavier, et pas seulement avec de la pâte à modeler ET me la pêter en société avec mon formulaire de contact qui m’envoie des vrais mails.

Et puis bien sûr,  ce fameux site, il a bien fallu l’héberger. D’ailleurs sur le serveur de l’école. Mais y’a un moment où il faut prendre les devants et penser à s’envoler du nid. Courageuse mais pas téméraire (et surtout en manque d’euro-thune), j’ai opté pour l’hébergement sur le serveur d’un copain.
Ce qu’il faut savoir, c’est que le copain n’y connaît rien en développement et encore moins en serveur. C’est jusque que comme il travaille chez un célèbre hébergeur, il a un serveur à sa disposition, et comme il a rien à héberger, il me permet de squatter son espace gratuitement.

Alors au début, j’hébergeais mes trucs pépouze et tout se passait bien.

PHPSESSID s’invite dans l’URL…

Puis un jour, je remarque que y’a une putain de variable de session qui s’affiche dans l’URL de mon site. Première réaction : je cours vérifier si ça fait la même chose sur le serveur de l’école (également chez le célèbre hébergeur). Réponse : non.
J’en parle à Copain, qui me dit qu’en interne, on voit pas d’où ça vient et que j’ai qu’à mettre des trucs dans mon .htaccess et dans mon fichier index et voilà, bisous, y’a plus l’affichage chelou. En prime, j’ai quand même droit à un « t’aurais pu trouver toute seule sur google« . C’est pas faux mais bon, hein, j’ai paniqué ! J’avais peur que les Chinois du F.B.I. de Russie me pirate mon site !

Un autre jour, je grille que dans l’administration de mon site, mon module de modification ne fonctionne plus. Je sais qu’il a déjà fonctionné auparavant (puisque je fais toujours pleins de fautes quand j’encode des nouveaux trucs et que j’ai forcément du corriger mes insertions) mais là, ‘a marche pu’.
L’angoisse.

Qu’est-ce qu’on pouvait observer ?

Imagine que je suis connectée, que j’ai donc accès à mon site côté visiteur ET à mon administration avec un tableau reprenant les articles, une page pour en créer, des boutons pour modifier et pour supprimer les articles. Imagine que quand je clique pour modifier un article à la con (comme un qui parlerait de Choucroute par exemple), le formulaire pré-rempli s’affiche, mais quand je vais afficher le code source, il me montre ma page d’accueil visiteur.

Da fuck ?

Quand je clique sur [modifier], pour envoyer le formulaire, mes variables de session sont toujours les mêmes, je suis toujours connectée MAIS en fait non car je n’ai plus accès à mon menu d’admin, ni à mon interface d’administration.

Je ne comprends rien. Je cherche sur les Internets, je demande de l’aide à des amis webdev, je fous mon code sur github, à force de lire des posts, je les connais par cœur, mais je ne trouve pas la solution.

Puis un jour, on découvre que register_globals : ON

Trois semaines passent. Je demande finalement à mon prof. Au bout de trois heures, il comprend : « c’est register_globals qui est actif. Mais je comprends pas, c’est obsolète depuis les années jadis, c’est une grosse faille de sécurité ce machin ! ».

Même sur php.net, ils le disent :

Cette fonctionnalité est devenue OBSOLÈTE depuis PHP 5.3.0 et a été SUPPRIMÉE depuis PHP 5.4.0.

Et ils ajoutent même tout un paragraphe pour expliquer que c’est vraiment de la bonne grosse chiasse. Pas étonnant qu’on n’en parle plus et que les copains n’y aient pas pensé si, telle la variole, cette saloperie était censée avoir été éradiquée.

Après annonce de la découverte à Copain, il a décidé de passer le serveur sur une version plus récente de php (et plus la 5.3 comme avant). Du coup, cette fonctionnalité n’est plus et mon site refonctionne niquel.

Que se passait-il dans le code ?

Apparemment, cette immondice permet aux variables d’être considérée comme des globales. Du coup, si, admettons, j’ai une variable de session qui s’appelle key et qu’à un moment, j’ai un $key dans une boucle, bah ça s’ajoute en fait. Et au bout d’un moment, ça fait tout planter. Ce qui fait que la session d’admin était accessible jusqu’à un certain point et qu’après, trop de $key tuent la session. Apparemment.

Le truc, c’est que l’activation de register_globals permettait aussi d’afficher les variables de session dans l’URL. Depuis que la version de php est plus récente, même en supprimant les morceaux de code “réparant” le problème… bah y’a de toute façon plus de problème.

Bref, j’ai appris un chouette truc !

Un grand merci et un gros bisou à Michaël et à Asenar pour m’avoir aidée <3

Laisser un commentaire

Articles similaires

Commencez à saisir votre recherche ci-dessus et pressez Entrée pour rechercher. ESC pour annuler.

Retour en haut