2013-12-12 46 views
1

我試圖使用define函數和定義的函數來避免盜鏈/直接訪問PHP腳本,但由於某種原因它不起作用。防止使用PHP中的define和defined函數直接訪問

我遇到的問題是,它根本無法正常工作,即使我先訪問index.php並按照鏈接和/或發佈表單,我也會收到「Hotlinking is not allowed」消息。

這裏是我想要做的一個例子:

的index.php

<?php 
define("ACCEPT",TRUE); 
?> 
<html> 
... 

core.php中

<?php 
if (defined('ACCEPT')) 
{ 
// ACCEPT is defined which means the user came here via index.php 
} 
else 
{ 
// The user is most likely direct accessing core.php, abort. 
echo "Hotlinking is not allowed"; 
exit; 
} 

請注意,後「防止直接訪問,是否有可能欺騙一個PHP定義?」沒有回答我的問題,也沒有「定義和定義禁止直接訪問」的帖子。

+0

如果您有不想直接訪問的內容,請勿將其放入文檔根目錄。保持在外面。您仍然可以將其包含在其他腳本中。 – Brad

+0

不幸的是,我的主機不允許我訪問任何東西,但public_html root =/ – Squeeze

+1

你應該得到一個新的主機!即使我的3美元/月。共享主機讓我可以做到這一點。 5美元/月,你可以得到一個堅實的VPS。 – Brad

回答

2

這是相當數量的程序。只要創建一個標題來檢查定義,並在未定義的情況下重定向/退出。這樣做沒有任何問題,但它只是增加了每頁所需的行數/代碼量。這可能會令人困惑,因爲DEFINE需要在一個地方,然後所請求的頁面必須包含在內,或者需要包含具有該定義的頁面。這完全是關於結構。

這裏是你可以做的:

的.htaccess - 每到index.php

的index.php請求重定向 - 定義一個變量,充當獲取/包括網頁上顯示路由器根據請求數據。

childpage.php - 檢查變量是否存在(意思是包含它),然後做任何需要做的事情。

另一種選擇是將敏感代碼放在htaccess受保護的目錄中。

你也可以使用一個框架來做很多事情。

或者,如果您的主機允許您編輯您的vhost配置,如果您只有權訪問公共目錄,他們可能不會這樣做,您可以將文檔根目錄更改爲更高的目錄。

+0

你能否通過檢查頭文件來解釋更多你的意思?我的意思是,你如何檢查標題並使用define/defined – Squeeze

+0

忽略我的第一條評論,我明白你想說什麼。 有沒有其他方法可以使用定義函數?在我的情況下,使用include來建立index.php或core.php之間的連接將是愚蠢的。 – Squeeze