Qu’y a-t-il de nouveau dans PHP 7.2 ?
Le 30 novembre 2017, la communauté PHP a annoncé le lancement de PHP 7.2. Il s’agit plus précisément de la deuxième mise à jour de fonctionnalités de PHP 7.
Sur la lancée de PHP 7
PHP 7 avait été lancé fin 2015, marquant le début d’une nouvelle ère pour le langage de programmation et la communauté allant de pair, qui étaient déjà en train de fortement évoluer depuis plusieurs années.
PHP est un langage très accessible, qui a parfois été dénigré par les puristes du langage dans le monde du développement. La réalité montre cependant que plus de 83 % de tous les sites web présents sur Internet sont programmés en PHP. Et des frameworks populaires tels que WordPress, Drupal et Magento ne font que contribuer au succès de l’écosystème PHP.
Avec PHP 7, un important investissement a été réalisé afin d’en améliorer sensiblement les performances. On a aussi veillé à la mise au point d’un meilleur typage explicite, et de nombreuses anciennes extensions ont été abandonnées.
Le calendrier de lancement exige qu’une mise à jour de fonctionnalités soit lancée chaque année. Suite au lancement de PHP 7.1 en 2016, c’est donc PHP 7.2 que nous avons reçu cette année comme cadeau de Noël anticipé.
PHP 7.2 est en grande partie une mise à jour de fonctionnalités de sécurité
Hormis quelques légères améliorations apportées au langage même, on constate que la plupart des nouveautés ont trait à la sécurité.
- L’ajout d’Argon2 au noyau de PHP pour le hachage de mots de passe
- La suppression de l’extension mcrypt du noyau de PHP
- L’intégration de l’extension Sodium au noyau de PHP
- L’amélioration des constantes de versions TLS minimum
Hachage de mots de passe avec Argon2
Jusqu’à il y a peu, bcrypt était le meilleur choix pour hacher des mots de passe en PHP. Mais grâce à l’arrivée de PHP 7.2, il est à présent possible d’utiliser une alternative : Argon2.
Argon2 est sorti vainqueur du Password Hashing Competition et est considéré comme étant plus sûr que bcrypt du fait qu’outre un « time cost », il y a également un « memory cost ».
Cela signifie que l’algorithme complique encore plus la tâche des hackers qui tentent d’obtenir des mots de passe par le biais d’attaques par force brute. Le « time cost » est généralement contourné en s’attaquant au mot de passe par le biais d’attaques basées sur des processeurs graphiques très puissants.
Le « memory cost » supplémentaire fait en sorte que ces machines ont soudainement besoin d’une quantité proportionnelle de RAM pour pouvoir deviner le mot de passe par force brute.
Un autre avantage d’Argon2 est qu’il permet également de déterminer le nombre de threads qui sont utilisés en parallèle pour calculer la complexité de l’algorithme de hachage du mot de passe.
Disparition de Mcrypt
Mcrypt est une extension populaire de PHP qui permet de faire du chiffrement. Malheureusement, la librairie mcrypt dont cette extension dépend n’a plus été mise à jour depuis 2007.
Cette librairie comporte différents bogues, ainsi que des patchs qui n’ont pas été corrigés depuis longtemps. À l’époque de PHP 7.1, cette extension était déjà considérée comme étant obsolète. Avec l’arrivée de PHP 7.2, mcrypt disparaît complètement du noyau de PHP et est déplacée vers le dépôt PECL.
Une grande partie de la logique proposée par mcrypt est parfaitement prise en charge par OpenSSL et la nouvelle extension Sodium.
Sodium, le concurrent d’OpenSSL
OpenSSL est la plus populaire des librairies de chiffrement, mais elle n’a pas que des partisans. Dans le cadre d’une concurrence saine, PHP 7.2 a prévu une libraire de chiffrement alternative : Sodium.
Une mise en œuvre de libsodium était déjà disponible depuis longtemps en PHP ; elle était proposée via PECL. La promotion de cette extension nécessitait un changement de l’espace de noms pour pouvoir répondre aux conventions de codage de PHP : dans PECL, l’espace de noms « \Sodium » était utilisé pour appeler des fonctions allant de pair.
Avec PHP 7.2, ces fonctions se trouvent dans l’espace de noms racine et ont été re-préfixées avec « sodium ».
L’amélioration des constantes de versions TLS
Jusqu’à il y a peu, lorsqu’une connexion chiffrée était établie depuis PHP, « ssl » était le gestionnaire de flux standard. Pour PHP 7.2, il a été décidé de faire de « tls » l’appellation standard et de « ssl » un alias.
Il a également été décidé de faire preuve de plus de rigueur en ce qui concerne les versions TLS prises en charge. Les clients qui prennent uniquement en charge la version 1.0 de TLS seront exclus.
Dans le passé, une tentative d’exclusion avait déjà eu lieu, mais à l’époque, cette décision avait été reportée de manière à conserver la compatibilité avec PHP 5.6. Le fait que PHP 7.2 fait partie d’une nouvelle « major release » permet de mettre fin à cette rétrocompatibilité.
Fonctionnalités liées au langage
Les fonctionnalités liées au langage ne sont pas très spectaculaires et sont principalement des corrections d’anciennes erreurs :
- Conversion correcte de clés numériques dans les objets et tableaux (et vice-versa) lors de cast
- Résultats corrects lorsqu’un objet non dénombrable est appelé via « count »
Les seules fonctionnalités de langage notables de PHP 7.2 sont la disponibilité d’un « object typehint », qui permet d’accepter et renvoyer des objets génériques dans des fonctions et des méthodes. Cela permet de ne plus devoir utiliser un nom de classe spécifique.
PHP 7.2 est dès à présent aussi disponible sur la plateforme d’hébergement mutualisé de Combell
Le lancement de PHP 7.2 a été annoncé le 30 novembre 2017. Le jour même, nous avons annoncé la prise en charge de cette nouvelle version sur notre plateforme d’hébergement mutualisé.
Vous pouvez donc dès à présent utiliser toutes les nouvelles fonctionnalités. Pour les nouveaux packs d’hébergement web, vous pouvez immédiatement choisir cette version ; pour les packs existants, vous pouvez passer d’une version à une autre à la volée dans My Combell.
Cette nouvelle version propose également de nombreuses corrections de bogues et améliorations au niveau du noyau de PHP.