2011-06-15 91 views
5

我正在考慮將上傳的文檔保存到webroot之外的文件夾中,並使用readfile(file)以腳本形式提供下載文件。如何確保上傳的文件是MS Word文檔?

不過,我想知道如果下面就足以消除任何形式的威脅,有可能是:

$filename = basename($_FILES['uploaded_file']['name']); 
$ext = substr($filename, strrpos($filename, '.') + 1); 
if (($ext == "doc") && ($_FILES["uploaded_file"]["type"] == "application/msword")) 
{ 
execute rest of the code 
} 

我讀過的人使用finfo_open()建議,但我的服務器是在PHP 5.3 .0所以我不能使用它。我試過使用mime_content_type(),但它總是會向我發送任何類型的文件(我不知道我是否做錯了)的「文本/純文本」。

有什麼我可以添加,使這個更安全的過程?

回答

2

您將不可避免地遇到的一個問題是,瀏覽器可以不恰當地標記文件的MIME類型。例如,有一個常見的Firefox錯誤,可以將大多數文件標記爲application/octet-stream,即使該文件真的是doc或pdf或xls文件等。要做的最安全的事情是掃描文件服務器端,其中還應包括病毒檢查。但是,如果您的服務器訪問受限,則可能無法執行此操作。

我以前用ClamAv(http://www.clamav.net/lang/en/)來做到這一點。

有關更多詳細信息,請參見http://sourceforge.net/projects/php-clamav/

+0

恐怕我無法像你說的那樣做到這一點。我在共享主機上,我有很多選項受限制。 – Filgera 2011-06-15 19:39:53

相關問題