PHP 5.3.20是一個非常重要的版本。它發布于2012年,是PHP 5.3.x系列中的最后一個版本。它帶來了諸多改進和更新,將PHP在網絡應用程序開發中的地位提升到了一個新的高度。以下是它的一些主要特點。
1.引入本地CSPRNG函數
function random_bytes($length) { $bytes = ''; if(function_exists('openssl_random_pseudo_bytes') && (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN')) { // OpenSSL is slow on Windows $bytes = openssl_random_pseudo_bytes($length); } if($bytes === '' && is_readable('/dev/urandom') && ($hRand = @fopen('/dev/urandom', 'rb')) !== FALSE) { $bytes = fread($hRand, $length); fclose($hRand); } if(strlen($bytes)< $length) { $bytes = ''; if($this->use_dev_random && is_readable('/dev/random') && ($hRand = @fopen('/dev/random', 'rb')) !== FALSE) { $bytes = fread($hRand, $length); fclose($hRand); } if(strlen($bytes)< $length) { throw new Exception('Unable to generate random bytes.'); } } return substr($bytes, 0, $length); }
在過去,一些系統并沒有為PHP提供好的隨機數生成器。為了解決這個問題,PHP 5.3.20引入了一個名為random_bytes()的新函數。它使用操作系統提供的安全的隨機數生成器,確保應用程序中使用的隨機數都是真正的隨機數,從而提高了安全性。
2.修復特定版本的Zend引擎
$token = "abc"; $hash = crypt($token); // Note: $hash is *not* the salt! // $hash is now '%$123-)&!'; and not nearly long enough
在過去的PHP版本中,crypt()函數有一個嚴重的漏洞,導致一些敏感信息可能被暴露。PHP 5.3.20修復了與這個缺陷相關的問題,確保crypt()函數安全可靠。
3.更新了PDO驅動程序
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); $stmt = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories< :calories AND colour = :colour'); $stmt->execute(array('calories' =>150, 'colour' =>'red'));
PHP的PDO驅動程序在5.3.20中也得到了改進。新的PDO驅動程序支持更多的數據庫,包括MySQL、Oracle、PostgreSQL等。此外,它也為查詢語句提供了一組新的參數綁定功能,使代碼更加安全可靠。例如,通過使用PDO防止SQL注入攻擊的示例:
4.添加了新的名字空間
namespace MyProject; const CONNECT_OK = 1; class Connection { /* ... */ } function Connect() { /* ... */ }
PHP 5.3.20還引入了新的名字空間概念。名字空間是一種PHP語言結構,它可以為命名元素提供一個獨特的區域,從而避免不同代碼塊中的名稱沖突,使代碼更加可讀。例如,在以下示例中,Connect()函數和Connection類都屬于MyProject名稱空間:
總之,PHP 5.3.20在網絡應用程序開發中具有重要的作用。通過引入本地CSPRNG函數,修復特定版本的Zend引擎問題,更新了PDO驅動程序以及添加了新的名字空間,PHP 5.3.20可以更加可讀、可靠和安全。