我有一個名爲constants.php
一個PHP腳本,在那裏我有很多有價值的數據,像我的MySQL信息等PHP腳本可以包含在我的文件系統之外嗎?
是否可以訪問我的機器之外的腳本?比方說,使用以下內容:include http://www.fakewebsite.com/config/constants.php
我有一個名爲constants.php
一個PHP腳本,在那裏我有很多有價值的數據,像我的MySQL信息等PHP腳本可以包含在我的文件系統之外嗎?
是否可以訪問我的機器之外的腳本?比方說,使用以下內容:include http://www.fakewebsite.com/config/constants.php
嗯,是的,沒有。
是:他們將能夠訪問文件constants.php
的輸出(但很可能它將是空白的)。
否:他們將無法訪問您的變量。您只能在解析PHP之前訪問它們。
「否」取決於您的PHP配置。它也可以是'是'。你不應該明確地說第 – Mahdi
是的,只要您有權訪問該腳本,就可以將它包含在您自己的腳本中。
讓我們讀the docs:
如果「URL fopen封裝」在PHP(他們是在 默認配置)啓用後,您可以通過HTTP指定使用 一個URL(要包括的文件或其他支持的包裝 - 請參閱支持的協議 和包裝的協議列表),而不是本地路徑名。如果 目標服務器將目標文件解釋爲PHP代碼,則可以使用具有HTTP GET的URL請求字符串 將變量 傳遞到包含的文件。這並不嚴格地與 包括該文件並使其繼承父文件的變量 作用域一樣;該腳本實際上正在遠程服務器上運行,並且 結果將被包含到本地腳本中。
因此,您實際上可以加載外部文件(如果您的管理員允許)。然而,它會對你的情況有用嗎?在您的網絡瀏覽器中打開http://www.fakewebsite.com/config/constants.php
並打開「查看源代碼」菜單。無論您在那裏看到什麼,這就是您的PHP腳本將會看到的內容(很可能是空白頁)。
最後但並非最不重要......假設遠程服務器配置爲不執行*.php
文件或包含生成PHP代碼PHP腳本,你爲什麼要張貼所有有價值的和敏感數據互聯網?
+1「讓我們閱讀文檔」。 :-) – SDC
順便說一句,我試圖做到友善,而不是苛刻:) –
如果URL是可公開訪問的,那麼是的,任何人都可以從URL讀取它,包括腳本。
但是,這裏的關鍵部分是他們將訪問輸出constants.php
,而不是文件本身。他們會得到完全相同的輸出,就像從Web瀏覽器訪問文件一樣。
他們不能做的是通過調用URL來包含您的實際PHP代碼。該URL不是與PHP文件的直接連接;它是一個到Web服務器的連接。 Web服務器然後處理PHP文件並提供輸出。只要Web服務器在發送輸出之前處理PHP文件,那麼您的PHP代碼就是安全的。它不能通過URL看到。
可能還有其他的方式來獲得它,但不是那樣。
+1爲清晰的措辭和重點 –
爲什麼?在可以自由訪問的遠程服務器上存儲mysql數據庫信息似乎非常不安全。 – andy