PHP 5.4.33 Released

Annonce de publication de PHP 4.1.0

Après un long processus "QA", PHP 4.1.0 est enfin sorti!
[ English Version ]

PHP 4.1.0 inclut beaucoup d'améliorations importantes:

Comme certains l'ont noté, cette version est quelque peu historique, comme c'est la première fois dans l'histoire que nous incrémentons le numéro du milieu ! Les deux principales raisons à cela sont d'un côté les changements sans précédent de la nouvelle interface d'entrée, et de l'autre l'incompatibilité des modules dus au support des versions.

Ce qui suit concerne une description du nouveau mécanisme d'entrée. Pour une liste complète des changements voir le ChangeLog.


SECURITE: NOUVEAU MECANISME D'ENTREE

Avant tout, il est important de signaler que, sans tenir compte de ce que vous pourriez lire dans les lignes qui suivent, PHP 4.1.0 gère encore les anciens mécanismes d'entrée des anciennes versions. D'anciennes applications devraient bien fonctionner sans modifications !

Passsons à la suite mainenant que cela est dit :)

Pour différentes raisons, PHP qui se repose sur register_globals ON (ex. sur les formulaires, les variables serveur et d'environnement deviennent partie de la portée globale d'un script [namespace], et ce automatiquement) sont très souvent exploitable à des degrés divers. Par exemple le code suivant:

<?php
if (authenticate_user()) {
 
$authenticated = true;
}
...
?>

Peut être exploitable de la manière suivante, des utilisateurs distants peuvent simplement passer 'authenticated' comme variable d'un formulaire et même si authenticate_user() retourne false, $authentiticated va actuellement contenir true. Ce"la semble etre un exemple très simple, mais en réalité, bien des applications PHP sont exploitable par ce dysfonctionnement.

Tandis qu'il est parfaitement possible d'écrire du code PHP sécurisé, nous sentions que le fait que PHP permette, de manière beaucoup trop facile, d'écrire du code PHP non sécurisé n'était pas acceptable, et nous avons décidé de tenter un changement très grand et de rendre caduque register_globals. Evidemment, à cause de la grande majorité de code PHP dans le monde se reposant sur l'existence de cette fonctionnalité, nous ne la supprimerons jamais, mais nous avons décidés d'encourager les utilisateurs de ne plus l'utiliser à chaque fois que cela est possible.

Afin d'aider les utilisateurs à construire des applications PHP avec register_globals à Off, nous avons ajouté quelques nouvelles variables spéciales, variables qui peuvent être utilisées à la place des anciennes variables globales. Il y a 7 nouveaux tableaux spéciaux:

Maintenant, entre autre le fait que ces variables contiennent ces informations spéciales, elles sont aussi automatiquement globales dans toutes les portées. Cela signifie que vous pouvez y accéder de n'importe où, sans avoir à les déclarer en globales. Par exemple:

<?php
function example1()
{
    print
$_GET["name"];   // fonctionne, pas besoin de 'global $_GET;' !
}
?>

va fonctionner très bien! Nous espérons que cela va faciliter la tâche durant la migration de vieux code vers le nouveau, et nous sommes sûrs que cela vous simplifiera l'écriture de nouveaux codes. Une autre astuce est que le fait de créer de nouvelles entrées dans $_SESSION va automatiquement les enregistrer comme variables de session, comme si vous auriez appelé session_register(). Cette astuce est limitée uniquement au module de gestion de session - par exemple, créer de nouvelles entrés dans $_ENV ne va pas exécuter un put_env() implicite.

PHP 4.1.0 doit toujours avoir register_globals mis a On par défaut. C'est une version de transition, et nous encourageons les auteurs d'applications, spécialement les applications publiques qui sont utilisées par une large audience, de changer leurs applications pour fonctionner avec un environnement où register_globals est à Off. Il est clair qu'ils devraient profiter des nouvelles fonctionnalités fournies avec PHP 4.1.0 qui font que cette transition est plus aisée.

Dans la prochaine version "semi majeure" de PHP, de nouvelles installations de PHP devrait avoir register_globals mis à Off par défaut. Ne vous en faites pas! Les installations existantes, qui ont déjà un fichier php.ini qui a register_globals à On, ne vont pas être affectées. Cela vous affectera seulement si vous installez PHP sur une nouvelle machine (typiquement si vous êtes un nouvel utilisateur), et si vous le désirez vous pourrez toujours le mettre à On.

Note: Certains de ces tableaux ont d'anciens noms, exemple : $HTTP_GET_VARS. Ces noms fonctionnent toujours, mais nous encourageons les utilisateurs de migrer vers le nouveaux noms, plus courts et qui sont des versions automatiquement globales.

Les remerciements vont à Shaun Clowes (shaun at securereality dot com dot au) pour avoir révélé ce problème et avoir aidé à l'analyser.

French translation is available courtesy of Pierre-Alain Joye (pierre-alain dot joye at wanadoo dot fr).

To Top