如何保护我包含的php文件不被直接访问?

时间:2011-04-24 19:29:46

标签: php include

我的剧本......

的index.php

DEFINE('DIR', 'http://www.example.com');
DEFINE('IN_PAGE', TRUE);

INCLUDE DIR . ('/incl/header.php');
INCLUDE DIR . ('/incl/content.php');
INCLUDE DIR . ('/incl/footer.php');

/incl/header.php

if (!defined('IN_PAGE'))
{
    header("Status: 403 Forbidden");
    exit('<B>403 Forbidden</B>');
}

访问index.php

  

警告:   包括(http://www.example.com/incl/header.php)   [function.include]:无法打开   stream:HTTP请求失败! HTTP / 1.1   403禁止进入   /public_html/incl/index-incl.php   第4行

     

警告:include()[function.include]:   打开失败   'http://www.example.com/incl/header.php'   包括在内   (include_path ='。:/ usr / lib64 / php:/ usr / lib / php')in   /public_html/incl/index-incl.php   第4行


它的工作方式有点,如果我尝试直接访问该文件,我会收到“Forbidden”消息,就像我想要的那样..但是我不能将它包含在我的脚本中..尽管我很确定我正确地遵循了phpBB的dev wiki 。

我是非常新手,所以非常感谢您的帮助! =]

5 个答案:

答案 0 :(得分:1)

使用htaccess

答案 1 :(得分:1)

理想的方法是将您的包含文件放在webroot之外。

这并不总是可行,因此请确保您的包含文件不会自行“运行”任何代码。采用面向对象的方法,其中一个文件包含可运行的代码,或者它是一个不自行执行任何操作的类文件。

另一种替代方法是更改​​包含文件的扩展名(例如.inc),并使用htaccess直接访问这些扩展名。

作为专家提示:当您包含文件时,始终包含绝对路径:

include(dirname(__FILE__) . "/includes/template.inc");
// __FILE__ is the diskpath of the current file

而不是:

include("includes/template.inc");

这将为您节省许多麻烦。

正如其他人所说,永远不要包含来自其他网络服务器(http://)的文件,这意味着你做了一些根本错误的事情:P

答案 2 :(得分:0)

你试图包括喜欢 INCLUDE('http://www.example.com/incl/header.php'); 基本上

将目录更改为 DEFINE('DIR',dirname(__ FILE __));

或类似的东西,所以它不在包含路径中使用域,这意味着包含在本地完成。

答案 3 :(得分:0)

您尝试包含远程文件DEFINE('DIR', 'http://www.example.com');,以便您的服务器实际调用该网址,获取错误并显示 使用相对路径,例如。而是DEFINE('DIR', '/');

答案 4 :(得分:0)

问题是,include使用文件的本地路径,而不是网址。您需要知道帐户中文件的根路径,例如/home/your_account/public_html/