阻止对文件的直接脚本访问

时间:2013-02-21 16:11:23

标签: php security

目前我这样做:

在一个文件中,我们称之为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,它将无效,是不是?这种方法有什么缺陷吗?

2 个答案:

答案 0 :(得分:1)

就像你说的那样。如果有人直接在浏览器/../../file_two.php中输入,它就会退出。独立加载文件时,如果没有包含,则不定义ROOT。

请记住,在PHP中,一个文件包含其他文件,其他文件最后只有一个文件。因此,如果您的直接访问变量未在检查之前的某处定义,则不允许访问。

答案 1 :(得分:1)

将John Conde的评论转换为答案:

确保无法在浏览器中访问文件的最佳方法是将其放在webroot之外。

您应该有一个名为wwwpublic_html或类似的文件夹,其中包含您网站的文件。好吧,在包含该文件夹的文件夹中,您可以放置​​一个includes文件夹,并在其中包含您的脚本访问权限文件。这样,它们完全无法通过Web访问,但脚本仍然可以访问它们。