2014-02-05 15 views
0

我的preg_replace類似的東西.php.jpg.php.png.js.jpg.js.png,在爲了安全起見,上傳的文件(圖像)的名稱,並希望知道是否有任何擴展名,我應該考慮在上傳完成後將文件移動到相應的文件夾之前進行替換?如果上傳的圖片的名稱中包含.php.jpg

+2

什麼是試圖用這個替換完成? –

+0

要排除在文件上傳後將文件作爲php文件運行的可能性。 – user1190478

+0

[上傳安全威脅]的可能重複(http://stackoverflow.com/questions/11061355/security-threats-with-uploads) – deceze

回答

3

單看文件名並不是防止惡意代碼/可執行文件上傳的安全方法。

根據您接受上傳文件的類型,有更好的方法來保證安全。

一般來說從來沒有上傳任何地方從網絡公開訪問的任何文件,直到你知道100%,他們沒有任何懷疑。

如果允許圖片上傳 - 使用服務器端技術,如GD或ImageMagick的使用它之前重新保存的文件出來。如果這些工具無法從已上傳的內容中加載有效圖像(捕獲錯誤,所以您知道......),則可以刪除或隔離文件,直到您手動調查爲止。

在任何情況下,絕不將文件存儲在原來的文件名與換出擴展甚至上傳/替換。

搜索上傳安全的網站,瞭解一些更詳細的提示 - 這個問題拿出合理不經常。

+0

如果我通過chmod()設置文件訪問權限,我看不到任何權限更改。如果我通過fileperms()在更改之前和更改之後回顯權限模式,則值相同。 Ajax響應文本包含相同的值 - 33206.這是否意味着此文件的權限沒有更改,還是與我目前正在Windows環境中測試腳本有關? – user1190478

0

根據您需要的文件做什麼有可能隱窩或只是運行上的文件一個gzip。在那裏你節省了服務器的空間,如果有人上傳腳本文件,他們不能通過http請求運行。我想要的是檢查是否有任何公共訪問和/或建立一個htaccess文件。

+0

如何做到這一點? – user1190478

+0

爲PHP那裏我zlib,你可以使用,我認爲對於htaccess文件很多教程在互聯網上 – xasz

0

簡短的回答,肯定有,你也應該考慮封鎖,如果你打算使用一個黑名單的做法,像「PHTML」,「Java的」,「perl的」,「PY」,「ASP許多其他可執行文件擴展名','去',你應該考慮可以提供惡意軟件的exe和bat以及其他人。

但是,如果您要完全阻止移動它們(或者可能甚至在您到達更復雜的部分之前作爲表單驗證進行上載),我只會使用黑名單,而不是如果要上傳並改變移動中的名字。無論你是否想要一些未知的Java或Go或Python等坐在你的服務器上,而不管它是什麼,甚至你不在Apache上(這可以讓你把可執行擴展放在最後一段以外的地方)。爲什麼要允許上傳進行?它可以更簡單(你會看到人們推薦),但不允許3 +級別的名稱,但有三個級別名稱的合法用途,如語言識別。然而,這種方法本身並不能保證您不會受到可執行代碼的影響。這需要成爲您儘可能安全地上傳文件的一大組內容的一部分(例如您還想檢查圖像文件以獲取嵌入代碼)。

+0

感謝您的答案。我已經寫了腳本,它會重命名每個圖像,給它一個唯一的名稱,然後纔會移動到相應的目錄。 如何檢查嵌入代碼? – user1190478

+1

你可以看看Joomla爲此做了什麼, https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/helper/media.php#L190 – Elin

+0

謝謝@Elin。它真的幫助了我! – user1190478

相關問題