2013-02-21 51 views
5

目前,我做這樣的直接腳本訪問:攔截到一個文件

在一個文件中,讓我們把它叫做file_one.php,我有

define('ROOT', realpath(dirname(__FILE__))); 

require_once(ROOTPATH . '/file_two.php'); 

而在file_two.php我再有這樣的頂部:

if (! defined('ROOT')) 
    exit; 

所以file_two.php內容只能如果ROOT定義,它發生在file_one.php訪問。如果您嘗試直接訪問file_two.php,它將無法正常工作,是嗎?這種方法有缺陷嗎?

+5

一個更好的主意是如果可能的話把它放在webroot之外 – 2013-02-21 16:12:32

+0

CodeIgniter似乎這樣做,所以應該是最安全的。雖然我同意上面的帖子,如果這是一個問題,只需將其移出文檔根目錄即可 – 2013-02-21 16:15:24

回答

1

轉換約翰·孔德對答案的評論:

,最好的辦法,以確保文件不能在瀏覽器進行訪問是把它的根目錄之外。

您應該有一個名爲wwwpublic_html或其他類似的文件夾,其中包含您網站的文件。那麼,在包含該文件夾的文件夾中,您可以放置​​一個includes文件夾,並在其中包含腳本訪問專用文件。這樣,他們完全無法從網絡上訪問,但腳本仍然可以找到他們。

1

完全如您所說。如果有人直接在瀏覽器/../../file_two.php中鍵入,它將會退出。當文件獨立加載時,如果不包含,ROOT沒有定義。

請記住,在PHP中,一個文件包含其他文件以及其他文件,並且最後會以單個文件結尾。所以,如果您的直接訪問變量在檢查之前沒有被定義,它將不允許訪問。