La nuova versione di PHP – la 7.2 – rilasciata lo scorso 30 novembre , include diversi miglioramenti relativi alla sicurezza e agli algoritmi crittografici e di hashing.
Brought to you by 236 different committers, making 4456 commits, the #PHP project is pleased to bring you #PHP 7.2.0.
News: https://t.co/FPEWKGe3aP
Downloads: https://t.co/0aMBHyXb63
Migration guide: https://t.co/wjHAlRUSPS– php.net (@official_php) November 30, 2017
Il cambiamento principale di questa release è senza alcun dubbio l’introduzione di un nuovo algoritmo di hashing – Argon2, versione 1.3 – che sarà utilizzabile lanciando la funzione password_hash()
, utilizzando la costante PASSWORD_ARGON2I
come secondo argomento.
L’algoritmo Argon2 si è aggiudicato la Password Hashing Competition indetta nel 2013 da un team di esperti di sicurezza guidato da Jean Philippe Aumasson. L’algoritmo possiede tre caratteristiche importanti che lo rendono superiore a BCrypt, il quale rappresenta tuttora l’algoritmo di hashing predefinito di PHP: è possibile definire dei limiti al suo utilizzo del tempo, sia come numero di iterazioni che come tempo di esecuzione, della memoria e del numero di thread paralleli . BCrypt possiede invece un solo fattore di costo , poiché risale al 1999 e utilizza un solo core della CPU; al tempo non erano ancora presenti sul mercato i processori multi-core.
Altro cambiamento introdotto con PHP 7.2 riguarda il graduale abbandono della libreria Mcrypt , il cui sviluppo è stato abbandonato nel 2007 e che per questo motivo presenta numerosi bug irrisolti: Mcrypt non sarà più inclusa nel core di PHP, ma entrerà a far parte del PECL , il repository delle estensioni; ad ogni modo, le funzioni di Mcrypt lanceranno d’ora in avanti notifiche di tipo E_DEPRECATED
. Una libreria analoga ad Mcrypt, libsodium, effettuerà la transazione opposta, passando dal PECL al pacchetto core del linguaggio.
Altri cambiamenti minori riguardano il miglioramento di alcune costanti relative al TLS , la restituzione di warning per l’uso improprio della funzione count()
, la possibilità di forzare l’utilizzo del tipo object come parametro o come valore restituito di una funzione, miglioramenti ai cast da object ad array e viceversa, il refactoring dell’estensione Hash , al fine di utilizzare internamente object anziché resource.
Elia Tufarolo