標(biāo)簽是Web開發(fā)者常用的一種編程語言,但PHP 5.3.0版本中存在著一些漏洞問題。這些漏洞問題雖然已經(jīng)被修復(fù),但在很多早期版本中仍然存在,這就給網(wǎng)站的安全帶來了很大的隱患。
其中最為著名的漏洞是在PHP 5.3.0版本中的`register_globals`,此漏洞處于開啟狀態(tài)時(shí),會(huì)將所有的GET、POST和COOKIE變量通通設(shè)置為全局變量,這就意味著用戶提交的表單能直接對(duì)全局變量進(jìn)行寫入,并可以執(zhí)行惡意的代碼。那么一旦惡意攻擊者利用這個(gè)漏洞,就會(huì)對(duì)用戶提交的數(shù)據(jù)進(jìn)行篡改,造成用戶信息泄極大,甚至極有可能達(dá)到竊取網(wǎng)站敏感信息等目的。
例如下面的代碼,就利用了`register_globals`的漏洞:if(!empty($_GET['username'])){
$username = $_GET['username'];
$sql = "SELECT * FROM users WHERE name = '$username'";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($result)){
echo $row['name'] . '
';
}
}
在上面的代碼中,參數(shù)`username`,會(huì)自動(dòng)變?yōu)槿肿兞浚@就意味著它可以被篡改,而攻擊者可以利用這個(gè)漏洞來執(zhí)行一些SQL注入或XSS攻擊。
除此之外,還存在一些對(duì)noquotes的繞過漏洞。當(dāng)用戶通過瀏覽器提交一些表單時(shí),這些表單的內(nèi)容就會(huì)被PHP作為輸入讀取進(jìn)來。在某些情況下,PHP表單處理器會(huì)對(duì)這些輸入進(jìn)行引用,如果某些輸入沒有被引用,則會(huì)被當(dāng)做指令之類的東西來處理,從而產(chǎn)生漏洞。強(qiáng)制PHP表單處理器對(duì)所有輸入進(jìn)行引用往往能夠避免這個(gè)問題。下面是由于noquotes漏洞引起的XSS攻擊的示例代碼:<form method="get" action="index.php">
Enter your name: <input type="text" name="name">
<input type="submit" value="Submit">
</form>
<?php
//模擬經(jīng)過簡單的驗(yàn)證,如果用戶名稱為Jack就把“歡迎,Jack!”打印到頁面
if(isset($_GET['name']) && strcasecmp((string)$_GET['name'], 'jack') === 0) {
echo 'Welcome, ' . $_GET['name'] . '!';
}
else {
echo 'Invalid name.';
}
?>
上述代碼無法防范來自黑客攻擊的XSS攻擊,黑客可能會(huì)試圖通過輸入javascript代碼來在受保護(hù)網(wǎng)頁上運(yùn)行他們的惡意程序。
這些前面漏洞都非常的危險(xiǎn),因此我們必須時(shí)刻牢記要盡可能的升級(jí)到PHP 5.3.1或者更新版本,以避免各種漏洞的發(fā)生。同時(shí),在編程的時(shí)候也要加強(qiáng)代碼審查、過濾和驗(yàn)證,才能確保我們的代碼更加安全。