国产毛片午夜福利,国产黄网,国产亚洲天堂,97国产精品

  •  
    如何對PHP程序中的常見漏洞進(jìn)行攻擊(下)
    發(fā)布時間:2008-04-28   瀏覽次數(shù):1184103

    如何對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”的值。

    下一篇: PHP高手寶典
    立即預(yù)約