2013-08-01 79 views
-1

我正在尋找最佳實踐,模塊等來安全地通過PHP應用程序進行文件系統操作。類CMS的應用程序不會使用數據庫,而是將減價文件放置在文件夾中,並在顯示時進行處理。因此,將會出現大量移動文件,重命名文件,寫入文件等。PHP文件系統操作安全問題

我正在尋找一些可以幫助管理這些操作的庫(例如,相當於一個ORM),輸入消毒,移動文件。等等,而不是從頭開始。如果這樣的事是可用的,我想的最佳實踐,一經上市等

到目前爲止,我只找到guidance from PHP.net

的更多信息:該計劃是建立它位於ontop的的Stacey一個基於網絡的最終用戶界面。我將擁有一個包含最終用戶界面的測試環境,當更改準備就緒後,它們將同步到生產環境。這是一個非基於數據庫的系統。斯泰西是方便管理和從開發人員的角度來看有工作,但用戶不希望直接降價工作和移動文件等

另外:請限制答案PHP的問題;服務器的事情,如chrooting或鎖定服務器將取決於用戶的個人環境和需求。從開發的角度來看,我想專注於保護我的分佈式代碼。

回答

0

我不知道這樣做的任何具體的圖書館 - PHP中的文件系統的支持是廣泛的,所以我不知道爲什麼他們會是必要的。你可能會更好從現有的CMS開始並修改它來做你想做的事 - 但我明白這可能是不可能的。這聽起來像應該使用數據庫的事情,但我想你已經知道了。

我不能聲稱知道確切的最佳實踐,這是更一般的建議。

首先,你的網絡服務器 - 因此你的PHP scritps - 將作爲某個用戶運行。這取決於你的配置和特定的服務器以及底層操作系統。理想情況下,您希望確保此用戶只能訪問您用作存儲的文件系統區域。除讀取訪問以外,不允許訪問其他任何地方(您的腳本等)以及讀寫到存儲區域。確切的做法取決於您的系統。

這是您的最後一道防線,不要依賴它,它在那裏是一個安全網。

這不完全清楚會引起哪些文件進行重命名,移動,塗改但它是一個安全的賭注,它根據用戶輸入的。因此,您需要確保清理所有用戶輸入,如果他們的頁面名稱變爲您想要的文件名稱,並且不想讓某些人輸入../../index.php作爲頁面名稱並刪除主站點。

總是假設最糟糕的情況:一個知道你係統內部的用戶,他的目標是做出最大的傷害。不要依賴'默默無聞的安全'或'沒有人會這樣做'。

我會做什麼(以前做過)是兩倍。首先將所有文件系統函數包裝到一個提供與方法相同功能的類中。這個類的工作是檢查是否允許發生任何事情,這意味着它可能需要讀取路徑和文件名並找出更改的位置。其次,清理當首次到達時可能是惡意的所有用戶輸入。你可能想看看使用escapeshellarg或URL編碼,或根據你的輸入是什麼。

如果允許用戶編寫腳本(或者執行更糟糕的PHP),那麼您還提到文件在運行時處理,那麼問題就會更多,並且可能存在根本性問題。但是你的問題並不清楚。

希望有所幫助。

+0

請參閱上面的更新。 –