- TEL:131 7970 3111
-
慧網(wǎng)微信
- 掃描二維碼
- 關(guān)注邳州在線
-
手機(jī)網(wǎng)站
- 手機(jī)掃描二維碼
- 進(jìn)入手機(jī)站
網(wǎng)站地圖
付款方式
如何對PHP程序中的常見漏洞進(jìn)行攻擊(下)
[庫文件]
正如我們前面討論的那樣,include()和require()主要是為了支持代碼庫,因?yàn)槲覀円话闶前岩恍┙?jīng)常使用的函數(shù)放到一個獨(dú)立的文件中,這個獨(dú)立的文件是代碼庫,當(dāng)需要使用其中的函數(shù)時,我們只要把這個代 碼庫包含到當(dāng)前的文件中可以了。
最初,人們開發(fā)和發(fā)布PHP程序的時候,為了區(qū)別代碼庫和主程序代碼,一般是為代碼庫文件設(shè)置一個“.inc”的擴(kuò)展名,但是他們很快發(fā)現(xiàn)這是一個錯誤,因?yàn)檫@樣的文件無法被PHP解釋器正確解析為PHP代碼。如果我們直接請求服務(wù)器上的這種文件時,我們會得到該文件的源代碼,這是因?yàn)楫?dāng)把PHP作為Apache的模塊使用時,PHP解釋器是根據(jù)文件的擴(kuò)展名來決定是否解析為PHP代碼的。擴(kuò)展名是站點(diǎn)管理員指定的,一般是“.php”, “.php3”和“.php4”。如果重要的配置數(shù)據(jù)被包含在沒有合適的擴(kuò)展名的PHP文件中,那么遠(yuǎn)程攻擊者很容易得到這些信息。
最簡單的解決方法是給每個文件都指定一個PHP文件的擴(kuò)展名,這樣可以很好的防止泄露源代碼的問題,但是又產(chǎn)生了新的問題,通過請求這個文件,攻擊者可能使本該在上下文環(huán)境中運(yùn)行的代碼獨(dú)立運(yùn)行,這可能導(dǎo)致前面討論的全部攻擊。
下面是一個很明顯的例子:
In main.php:
<?php
$libDir = "/libdir";
$langDir = "$libdir/languages";
...
include("$libdir/loadlanguage.php":
?>
In libdir/loadlanguage.php:
<?php
...
include("$langDir/$userLang");
?>
當(dāng)“l(fā)ibdir/loadlanguage.php”被“main.php”調(diào)用時是相當(dāng)?shù),但是因(yàn)椤發(fā)ibdir/loadlanguage”具有“.php”的擴(kuò)展名,因此遠(yuǎn)程攻擊者可以直接請求這個文件,并且可以任意指定“$langDir”和“$userLang”的值。