程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP保護文件系統的具體代碼分享

PHP保護文件系統的具體代碼分享

編輯:關於PHP編程

文件系統對於任何一個站點來說都是相當重要的,程序員們都在不遺余力的保護著自己的系統不受侵犯。今天我們就為大家講解了PHP保護文件系統的具體代碼示例。曾經有一個 Web 站點洩露了保存在 Web 服務器的文件中的客戶數據。該 Web 站點的一個訪問者使用 URL 查看了包含數據的文件。雖然文件被放錯了位置,但是這個例子強調了針對攻擊者保護文件系統的重要性。

  • 應用程序對文件進行了任意處理並且含有用戶可以輸入的變量數據,請仔細檢查用戶輸入以確保用戶無法對文件系統執行任何不恰當的操作。清單 1 顯示了下載具有指定名的圖像的 PHP 站點示例。

    1. <?php   
    2. if ($_POST['submit'] == 'Download') {   
    3.     $file = $_POST['fileName'];   
    4.     header("Content-Type: application/x-octet-stream");   
    5.     header("Content-Transfer-Encoding: binary");   
    6.     header("Content-Disposition: attachment; filename="" . $file . "";" );   
    7.     $fh = fopen($file, 'r');   
    8.     while (! feof($fh))   
    9.     {   
    10.         echo(fread($fh, 1024));   
    11.     }   
    12.     fclose($fh);   
    13. } else {   
    14.     echo("<html><head><");   
    15.         echo("title>Guard your filesystem</title></head>");   
    16.     echo("<body><form id="myFrom" action="" . $_SERVER['PHP_SELF'] .   
    17.         "" method="post">");   
    18.     echo("<div><input type="text" name="fileName" value="");   
    19.     echo(isset($_REQUEST['fileName']) ? $_REQUEST['fileName'] : '');   
    20.     echo("" />");   
    21.     echo("<input type="submit" value="Download" name="submit" /></div>");   
    22.     echo("</form></body></html>");   
    23. }  

    正如您所見,清單 1 中比較危險的腳本將處理 Web 服務器擁有讀取權限的所有文件,包括會話目錄中的文件(請參閱 “保護會話數據”),甚至還包括一些系統文件(例如 /etc/passwd)。為了進行PHP保護文件系統演示,這個示例使用了一個可供用戶鍵入文件名的文本框,但是可以在查詢字符串中輕松地提供文件名。

    同時配置用戶輸入和文件系統訪問權十分危險,因此最好把應用程序設計為使用數據庫和隱藏生成的文件名來避免同時配置。但是,這樣做並不總是有效。清單 2 提供了驗證文件名的示例例程。它將使用正則表達式以確保文件名中僅使用有效字符,並且特別檢查圓點字符:..。

    1. function isValidFileName($file) {   
    2.     /* don't allow .. and allow any "word" character  / */   
    3.     return preg_match('/^(((?:.)(?!.))|w)+$/', $file);   

    以上就是本文為大家分享的PHP保護文件系統的具體代碼編寫。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved