2012-02-14 82 views
4

我想知道PHP文件如何確保安全。即使確切的位置是已知的,爲什麼不能下載php文件?如何保護PHP文件

當我上傳一個php文件到我的網絡服務器,讓我們說到domain.com/files,我打電話到domain.com/files頁面,我可以清楚地看到php文件和它的實際大小。然而,下載文件會導致一個空文件。

現在的問題是:安全機制是如何工作的?

回答

7

Web服務器的職責是將PHP腳本傳遞給PHP解釋器,該解釋器將HTML(或其他)輸出發送回Web服務器。

錯誤配置的Web服務器可能無法正確處理PHP腳本,並以原始形式將其發送到請求的瀏覽器,這將使得可以直接訪問PHP腳本。

你的虛擬主機可能有一個機制來列出目錄的內容,但除非它提供了一個下載機制來爲PHP腳本提供純文本頭(而不是HTML),而無需將其交給PHP解釋器,它將以PHP身份執行而不是傳送。

爲了能夠下載原始的PHP文件,服務器必須做一些額外的工作(可能通過另一個PHP腳本),它從磁盤讀取PHP文件並將其內容以純文本發送到瀏覽器頭。

0

簡短回答:由於服務器配置爲執行PHP文件並返回結果,您將永遠無法從外部訪問PHP源代碼。所有代碼都由服務器立即執行。所以,要回答你的問題:

安全機制是.php文件在請求時由服務器自動執行。

2

當您申請domain.com/files時,您的Web服務器設置爲顯示該目錄中的所有文件。

當您請求實際的php文件時,Web服務器執行它並將結果返回給您 - 而不是源代碼。

當然,以上兩者都可以配置。您可以切換目錄列表並禁用php文件的解析,以便輸出實際的文件內容/源代碼。

它通常是關閉目錄列表的好習慣。

+0

是的,我打算關閉目錄列表,但不知怎的,它似乎不工作。我的httpd.conf文件如下所示:http://pastebin.com/b6rgh15h我做錯了什麼? – cherrun 2012-02-14 18:30:18

+0

杜!沒有所有的目錄標籤... – cherrun 2012-02-14 18:47:09

1

當您首次在您的服務器上安裝PHP時,它會重新配置Apache,以便在請求.php文件時,Apache將處理轉移到PHP。 PHP然後處理文件中的代碼,並將PHP代碼echo ed或print的任何文本返回給Apache,然後通過網絡將其發回給請求PHP文件的人員。

「安全性」的好處在於Apache不會簡單地爲PHP文件提供服務,而是將其交給PHP處理器執行。如果Apache配置不正確,或者您使用的服務器軟件不能識別PHP,則原始PHP文件發送給客戶端。

0

這是一個巨大的誤解。當您嘗試通過端口80訪問PHP文件時,您的請求可能會通過網絡服務器運行,該服務器會對文件執行某些操作。在PHP的情況下,它通過PHP解釋器運行該文件,該文件會導致該文件創建一些輸出,而是發送給您的內容。

通過刪除該文件類型的解釋器,您可以輕鬆地允許下載PHP文件。如果Web服務器沒有任何特別的東西,並且不理解該文件,它只會讓客戶端下載它。