2015-06-14 76 views
3

是否可以將一些代碼放在PHP包含文件的頂部,以防止它被包含在我的目錄樹中某個級別以下的任何目錄中?考慮到以下目錄結構:是否包含一個php()'知道'它的請求者?

|--Myapp 
    |--includes 
     |include-this-in-my-app-only.php 
    |--index-for-my-app.php 
    |--contact-for-my-app.php 
    |--tenant-1-directory 
     |--index-for-tenant-1.php 
     |--contact-for-tenant-1.php 
    |--tenant-2-directory 
     |--index-for-tenant-2.php 
     |--contact-for-tenant-2.php 
    |--tenant-3-directory 
     |--index-for-tenant-3.php 
     |--contact-for-tenant-3.php 

我可以在我的包含文件,從如果正在從下面自己的任何目錄要求它被列入禁止它的頂部添加的東西?還是有另一種方法?我正在使用VPS。

+0

你可以檢查的「列入」文件(包括索引文件)與清單[get_included_files()](http://php.net/get_included_files),以確定包含呼叫來自哪個租戶。 – salathe

+0

你能告訴我們更多關於你的用例嗎?解決您的整體問題可能有更好的方法。一般來說,你提出的建議聽起來會導致難以維護代碼。 –

+1

聽起來像是,如果你認爲你想要或需要這個,其他的東西已經更加根本錯誤了。 –

回答

1

你可以在你的代碼和包含文件中定義一個全局常量,檢查它是否設置爲false或undefined then die();這將阻止這樣直接訪問文件:文件中

define('DIRECT', false); 

你將阻止訪問:

if(!DIRECT || !defined('DIRECT')){ 
die('DIRECT ACCESS NOT ALLOWED'); 
} 
+0

我認爲這是我的答案。爲了確認,基本上我在做的是通過定義一些東西來「播種」每個文件。然後要求包含文件準確定義它以加載。是對的嗎?我知道生活中沒有任何事情是100%安全和充分的證據,但有沒有簡單的方法可以被黑客入侵? – emailcooke

+0

這不會被黑客攻擊bcoz沒有直接訪問文件的權限,除非你在你的代碼中定義DIRECT常量然後需要該文件,如果這是你正在尋找的答案,請不要忘記標記爲正確對於這個問題:) –

0

編輯:

要回答你的問題標題:沒有,一個包含文件無法知道是誰把它稱爲。但是,您可以添加一個變量之前你有,說明它是誰來電:

caller.php:

$caller = "caller a"; 
include("include.php"); 

include.php:

// here you can manage $caller to know exactly who has called. 
echo $caller; 

對於您的具體情況,您可以始終在$ caller中傳輸路徑,然後將其與包含文件的路徑進行比較。

+0

@ pl-94請你詳細說明一下嗎?不知道這是可以理解的... – emailcooke

1

您可以在PHP文件的開頭運行函數debug_backtrace()以獲取以前的PHP文件。

相關問題