2010-05-22 100 views
1

考慮用PHP編寫的一個簡單的文件上傳系統。用戶只能在管理面板中訪問。 (不是FTP)。出於安全問題,他可能會將文件夾選項從707更改爲755。 這怎麼辦?我們可以通過上傳腳本來做到嗎?如果是,這是一個安全的應用程序?文件系統和安全(PHP)

+0

做什麼用戶你指的是?網站所有者或網站用戶? – 2010-05-22 11:11:23

+1

chmod中的最後一個數字是全局訪問權限,擁有7或5可以讓機器上的每個人訪問您的文件。你需要chmod 700,不應該讓你的朋友給你安全建議。 – rook 2010-05-22 18:39:45

回答

3

您可以使用chmod了點。每個文件系統操作有一個正在運行的風險,所以考慮的是,用戶可能試圖改變另一個文件的權限,以便來淨化輸入。

bool chmod ( string $filename , int $mode ) 

試圖改變 指定文件的模式,在模式給出。

0

它看起來像你不理解的方式Web服務器的作品。它只有一個system user ans,不需要更改site users的任何權限。

要實現的ACL功能,一個需要一個數據庫來保存用戶和權利,以及一些手工下載方法的實現,一個簡單的(正確的頭+ ReadFile的())或更復雜的解決方案之一,喜歡的nginx的x_accel_redirect

+0

用戶可以上傳圖片添加到文章。怎麼樣的文件夾chmod這種情況?該文件夾可能始終在707?那安全呢? – Felicita 2010-05-22 11:04:37

+0

@Fel權限必須設置爲使網站正常工作。而依賴於服務器的設置,而不是想象的「安全問題」 – 2010-05-22 11:06:36

2

在上傳腳本中,我們不能這樣做,這是不是一種安全的方式任何一個可以破解它。 我只能通過ftp通過chmod來上傳頁面代碼。

2

此腳本刪除所有的髒東西,並檢查從directory.If文件是存在於DIR那麼結果將是真實的,否則一個黑客攻擊的白名單文件

function WhitePage($page) { 

     $info2 = apache_lookup_uri('src/index.php?p=' . $page); 

     list($arg, $val) = explode("=", $info2->args); 

     $myrequest = basename(htmlspecialchars_decode($val)); 

     return $myrequest; 
    } 

    function Read_Dir($dir, $array = array()) { 
     $dh = opendir($dir); 
     $files = array(); 
     while (($file = readdir($dh)) !== false) { 
      $flag = false; 
      if ($file !== '.' && $file !== '..' && !in_array($file, $array)) { 
       $files[] = trim($file); 
      } 
     } 
     return $files; 
    } 

    function WhiteList($page = null) { 
     $info2 = apache_lookup_uri('src/index.php?p=' . $page); 
     list($arg, $val) = explode("=", $info2->args); 
     // basename from the std class 
     $myrequest = basename(htmlspecialchars_decode($val)); 

     $myrequest = trim($myrequest . '.php'); 
     //pathinfo from the std class 
     $path = pathinfo($info2->filename); 
     // get the files array 
     $whitefiles = Read_Dir($path['dirname']); 

     if (in_array($myrequest, $whitefiles, true)) { 

      $res = 1; 
     } else { 

      $res = 0; 
     } 
     return $res; 
    } 

    // this is solution of this kind of the problems 
    //$p='index.php?p=../../../../../../../../etc/passwd%00index.html'; 
    $p = '../../../../../../../../etc/passwd%00index.html'; 
    $p = WhitePage($p); 
    $result = WhiteList($p); 

    if ($result) { 
     echo 'ok'; 
    } else { 
     echo 'Die ,You evil hacker'; 
    } 
+0

此腳本刪除所有的髒東西,並檢查從directory.If文件是存在於DIR那麼結果將是真實的,否則黑客企圖 – 2012-09-03 15:05:23

+0

白名單文件嗨lehal2,你應該編輯你的答案,而不是添加評論,這樣對接下來看到你的答案的人更加明顯。 – 2012-09-23 19:44:37