2012-02-13 20 views
5

當我想要將PHP腳本寫入輸出到服務器上的文件時,我經常遇到負面評論。如何允許PHP在不影響服務器安全的情況下寫入文件

我使用fopen(),fwrite()fclose()函數。

我知道如何做到這一點的唯一方法是將輸出文件的權限設置爲0666或將其設置爲「nobody」(這是PHP運行在我們的Apache Web服務器上的用戶)所擁有的權限。

因此,如果「0666」或「無人擁有」是安全風險,那麼您如何成功並安全地允許PHP腳本寫入文件?

感謝您分享有關此主題的指導。

+0

請通過允許您自己的腳本寫入文件來解釋如何「危及服務器安全」。寫入數據庫也有安全風險嗎?只要確保你的代碼沒有安全漏洞。只要事情做得好,那就沒有問題了。 – Flukey 2012-02-13 13:55:40

+0

@Flukey ......其中的問題在於我的問題。我不清楚這個問題。但任何時候我提到我在服務器上有一個0666文件或PHP運行的用戶擁有的文件時,我會收到符合......的說明註釋......「當然,您知道您正在打開服務器以確保安全風險」。我只想編寫有效的腳本而不會降低服務器的安全性。 – 2012-02-13 13:59:41

+1

只要正在寫入的文件在公共Apache目錄之外,我就沒有看到問題。他們的評論是無知的。 – Flukey 2012-02-13 14:02:42

回答

3

如果您需要在PHP上傳文件後訪問這些文件,則需要存儲具有允許Web服務器(本例中爲apache)訪問它們的權限。人們所說的風險是,您網站上的某些腳本可能會被誤認爲提供該文件。這是一種假設性風險,但在許多內容管理系統中已經出現了這種風險。爲了減輕這種風險:

  1. 使文件名和路徑不容易被猜測。如果用戶有一條到getfile.php?file=1.txt的路徑,他們可以很容易推斷出有一個2.txt。把這個名字加密或者使其無序。
  2. 使提供文件的任何腳本確認事物,例如登錄用戶,對資源的授權,並從包含路徑的文件名中除去任何內容以避免對非法訪問/etc/passwd等等。

如果你只需要關閉文件,永遠不會提供它或通過PHP再次訪問它,你有更多的選擇。請使用chmodchown命令使apache用戶無法讀取它。如果你想成爲額外的偏執狂,請使用cron腳本將文件移動到PHP源代碼中未知的位置(並將其重命名)。至少,如果你的服務器被黑客入侵者無法直接進入目錄,但我們正在逐漸轉向討論操作系統安全性的問題。

+0

謝謝@DuaneGran。我會通讀你的答案,並在短時間內更徹底地消化它。但是我的第一反應是「哈希名字」是什麼意思?而且,你如何做到這一點,並在劇本中使用它? – 2012-02-13 14:27:14

+0

@ Dr.DOT我被誤認爲是一個散列,因爲這是一種方法。我的錯。碰巧,這個最近的問題有關易於解密/解密函數的解決方案,它可以用於文件名:http://stackoverflow.com/questions/9262109/php-simplest-twoway-encryption – 2012-02-13 14:30:47

-1

如果該可寫目錄位於外部世界可訪問的區域,則風險是。然後那些有正確的工具,並知道如何寫任何他們想要的目錄...或文件。然後,他們可以在其中放置惡意軟件或在您的網站上創建一個釣魚攻擊計劃。

真的,他們可以做各種事情來妥協你。我在我自己的服務器上看到了這一點,並沒有真正找到正確的解決方案。

相關問題