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

Php 阻止对文件的直接脚本访问,php,security,Php,Security,目前我是这样做的: 在一个文件中,我们称它为file\u one.php,我有 define( 'ROOT', realpath( dirname( __FILE__ ) ) ); require_once( ROOTPATH . '/file_two.php' ); 在file_two.php中,我在顶部有以下内容: if ( ! defined( 'ROOT' ) ) exit; 因此,只有在定义了ROOT的情况下才能访问file_-one.php的内容,这发生在file_-o

目前我是这样做的:

在一个文件中,我们称它为
file\u one.php
,我有

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

require_once( ROOTPATH . '/file_two.php' );
file_two.php
中,我在顶部有以下内容:

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

因此,只有在定义了
ROOT
的情况下才能访问
file_-one.php
的内容,这发生在
file_-one.php
中。如果您试图直接访问
文件_two.php
,它不会工作,对吗?这种方法有什么缺点吗?

正是你所说的。如果有人直接在浏览器/../../file_two.php中键入,它将退出。当独立加载文件(不包含)时,不定义根


请记住,在PHP中,一个文件包括其他文件和其他文件,并且最后几乎只有一个文件。因此,如果您的直接访问变量未在检查前的某个位置定义,则它将不允许访问。

将John Conde的注释转换为答案:

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


您应该有一个名为
www
public\u html
或类似文件夹,其中包含您网站的文件。那么,在包含它的文件夹中,您可以放置一个
includes
文件夹,让您的脚本仅访问其中的文件。通过这种方式,它们完全无法从web访问,但脚本仍然可以访问它们。

更好的办法是尽可能将其放在webroot之外CodeIgniter似乎就是这样做的,因此应该是最安全的。尽管我同意上面的帖子,如果这是一个问题,只需将其移出docroot即可