Wat is er nieuw in PHP 7.2?
Op 30 november 2017 kondigde de PHP community de release van PHP 7.2 aan. Volgens de naamgevingsconventies is dit de tweede feature release van PHP 7.
Verder bouwen op het elan van PHP 7
PHP 7 werd eind 2015 gelanceerd en luidde een nieuw tijdperk in voor de programmeertaal en bijhorende community die al enkele jaren fel aan het evolueren was.
PHP is een erg laagdrempelige taal waar soms denigrerend over gedaan werd door de taalpuristen van de development wereld. De realiteit is dat meer dan 83% van alle websites op het internet in PHP geprogrammeerd zijn. Populaire frameworks zoals WordPress, Drupal en Magento dragen alleen maar bij aan het succes van het PHP ecosysteem.
In PHP 7 werd er stevig geïnvesteerd in een drastische verbetering van de performance. Er werd ook ingezet op betere typehinting en met heel wat oude extensies werd komaf gemaakt.
De release timeline dicteert dat er een jaarlijkse feature update gelanceerd wordt. Na de release van PHP 7.1 in 2016, krijgen we dit jaar PHP 7.2 als vervroegd kerstcadeau.
PHP 7.2 is grotendeels een security feature release
Behalve enkele kleine verbeteringen aan de taal zelf, valt het op dat het merendeel van de nieuwigheden security-gerelateerd zijn.
- De aankondiging van de nieuwe Argon2 Password Hash in de PHP core.
- Het verwijderen van de mcrypt extensie uit de PHP core
- De implementatie van de Sodium extensie in de PHP core
- Het aanscherpen van de minimum TLS-versieconstanten
Argon2 Password Hashing
Tot voor kort was bcrypt de beste keuze om wachtwoorden te hashen in PHP. De nieuwe Argon2 Hash is met de komst van PHP 7.2 beschikbaar als alternatief.
Argon2 kwam als winnaar uit de zogenaamde Password Hashing Competition en wordt veiliger beschouwd dan bcrypt door het feit dat er naast een “time cost”, ook een “memory cost is”.
Dit betekent dat het algoritme het voor hackers nog moeilijker maakt om wachtwoorden de bruteforcen. De “time cost” wordt meestal omzeild door krachtige GPU-gebaseerde rekenkracht los te laten op het wachtwoord.
De extra “memory cost” zorgt ervoor dat deze machines plots een evenredige hoeveelheid RAM geheugen nodig hebben om het wachtwoord “brute force” te raden.
Als extraatje kan je met Argon2 ook bepalen hoeveel simultane threads er gebruikt worden om de complexiteit van de wachtwoordhash te berekenen.
Mcrypt verdwijnt
Mcrypt is een populaire PHP-extensie om aan cryptografie te doen. Helaas wordt mcrypt library waar deze extensie van afhangt sinds 2007 niet meer ondersteund.
De library bevat verschillende bugs en patches die al lange tijd openstaan. In PHP 7.1 werd deze extensie al als “deprecated” aanzien. In 7.2 verdwijnt mcrypt uit de PHP core en wordt die verplaatst naar de Pecl repository.
Veel van de logica die mcrypt aanbiedt, is perfect ondersteund door OpenSSL en de nieuwe Sodium extensie.
Sodium als concurrent voor OpenSSL
OpenSSL is de meest populaire library voor cryptografie, maar heeft voor- en tegenstanders. In het kader van gezonde concurrentie werd PHP 7.2 voorzien van een alternatieve crypto library: Sodium.
Er was al langer een libsodium implementatie in PHP, die via Pecl aangeboden werd. Het promoveren van deze extensie vereiste een verandering van de namespace om te voldoen aan de coding standards van PHP: in PECL werd de “\Sodium” namespace gebruikt om bijhorende functies aan te spreken.
In PHP 7.2 zullen deze functies zich in de root namespace bevinden en ge-prefixt worden met “sodium_”.
Het aanscherpen van TLS-versieconstanten
Wanneer er vanuit PHP een geëncrypteerde verbinding gemaakt wordt, was “ssl” tot voor kort de standaard stream wrapper. In PHP 7.2 werd beslist om van “tls” de standaard naamgeving te maken en van “ssl” een alias te maken.
Er werd ook beslist om strenger te zijn op vlak van gesupporteerde TLS-versies. Clients die enkel TLS-versie 1.0 ondersteunen, vallen uit de boot.
In het verleden werd hiervoor al een poging ondernomen, maar om destijds compatibel te blijven met PHP 5.6 werd de beslissing uitgesteld. Het feit dat PHP 7.2 deel uitmaakt van een nieuwe “major release”, laat een dergelijke “backwards compatibility break” toe.
Taalgerelateerde features
De taalgerelateerde features zijn niet enorm spectaculair en zijn eerder correcties van vroegere fouten:
- Correcte conversie van numerieke keys bij het casten van objecten naar arrays en vice-versa
- Correcte resultaten teruggeven wanneer een niet-itereerbaar object via “count” aangeroepen wordt
De enige noemenswaardige taalfeature in PHP 7.2 is de beschikbaarheid van de “object type hint” die toelaat om algemene objecten te aanvaarden en retourneren in functies en methods. Op die manier hoeft geen specifieke class name gebruikt te worden.
Vanaf nu ook beschikbaar op Combell shared hosting
Op 30 november 2017 werd PHP 7.2 aangekondigd. Diezelfde dag kondigden wij meteen de ondersteuning voor deze versie aan op ons shared hosting platform.
Je kunt dus vanaf nu integraal gebruik maken van de nieuwe features. Voor nieuwe webhosting-pakketten kan je meteen deze versie kiezen, voor bestaande pakketten kan je on the fly switchen tussen versies in My Combell.
Daarnaast mag je ook rekenen op heel wat bugfixes en interne verbeteringen die met deze release gepaard gaan.