2013-02-21 53 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中,一个文件包含其他文件以及其他文件,并且最后会以单个文件结尾。所以,如果您的直接访问变量在检查之前没有被定义,它将不允许访问。