2013-11-04 285 views
0

編寫一個安全的文件上傳從底部PHP腳本聽起來像地獄對我來說。php文件上傳到服務器

的基本規則,在沒有特定的順序上傳文件:

1)創建一個新的文件,一些隨機的,並給予命名

2新上傳的文件)檢查擴展

3)檢查exif技巧

4)將所有上傳的文件存儲在web根目錄下,併爲該目錄提供執行文件的權限。

5)確保文件上傳功能是在上傳該文件

6)檢查文件大小

7)做了一些惡意軟件掃描

8)PHP不執行代碼限制文件大小

所以我想這就是很多:)

我還甚至已經開始編寫腳本所有這一切,是因爲我有3名巴sic問題。

1)是我的列表完成,如果有什麼缺失,請說明其

2)是有某種形式的框架,可以做到這一切對我來說?一件簡單的事情,不是一個可以做其他事情的大事。

3) 這是一個指導好嗎? http://www.sitepoint.com/file-uploads-with-php/

我很想發佈代碼,但由於這個主題很大,我覺得最好問問大點。

在此先感謝。

+0

我不認爲這是「巨大的」,當你將它轉換爲代碼。然而,與其他人相比,#7有點複雜。 – Red

+0

我想不出任何你可能做的事情,這份清單非常詳盡。 –

+0

@紅葉你是對的;)感謝您的評論。 – Daniel

回答

1

該文章中的「exif技巧」和其他措施來嗅探文件內容本身幾乎沒有用處。 (OK,值得檢查上傳的圖像是預期的像素大小,但這是應用程序特定的,而不是安全問題。)

本文沒有說明它試圖用filetype sniffing來解決的威脅模型是什麼,但通常要做的是防止跨站點腳本攻擊,攻擊者在該文件中包含一些活動內容。通常這是HTML中的文件,哪些瀏覽器(尤其是IE)嗅探並決定將其解釋爲HTML,儘管這不是文件的服務方式。不幸的是,檢查文件是以PDF頭文件開始,還是代表有效的GIF圖像,這並不能幫助您,因爲可以將「變色龍」文件同時解釋爲不同的文件類型。

通過使用特定的非HTML Content-TypeX-Content-Type: nosniff標頭提供文件,可以在現代瀏覽器中阻止此攻擊。然而,還有更多隱晦的攻擊涉及將內容插入Flash或Java插件中,這些插件不受此標題的影響,並且對較舊的瀏覽器不具有防水功能。

阻止對上傳文件進行XSS攻擊的真正安全方法是簡單地從不同的主機名(最好是不同的域名和IP地址,但簡單的子域至少最有效)爲它們提供服務。然後,您可以讓攻擊者XSS儘可能多地使用user-uploads-hosting網站,而不會對主網站產生負面影響。

病毒掃描不太可能證明對通用文件上傳功能有用。如果您希望人們使用該站點交換Windows可執行文件,那麼可以值得對傳統惡意軟件進行掃描,但對於一般情況,您通常關心的是對網站本身的攻擊(服務器利用,XSS,瀏覽器漏洞利用)以及AV掃描儀無法檢測到這類攻擊。

創建一個新的隨機文件名的步驟(1)比鏈接文章嘗試執行的「清理」用戶提供的文件名要好得多。它的「安全文件名」功能並不直接容易受到目錄遍歷的影響,但它仍然允許使用諸如..(單獨),空字符串.htaccess以及會使Windows服務器混淆的文件名,如尾隨點,reserved names和以上長名稱。

你說得對,安全的文件上傳比起初看起來要複雜得多,不幸的是,大多數教程代碼(尤其是PHP)非常不幸。

+0

超級貼子:)我認爲你說的是​​非常有趣的,我需要重新訪問我的思想中心,然後我編碼上傳功能。我認爲對我的問題理想的方法是使用某種框架,也許Zend會有一些我可以使用的幻想。對我來說,將圖片上傳到子域名似乎只會讀取/寫入權限是最好的解決方案。 – Daniel