2012-07-07 72 views
0

我试图在网络上的其他地方搜索此地址。访问根目录之外的php文件最安全的方法是什么?

似乎无法得到一个坚定的答案,表明它是最安全的方式。

我知道最安全的方法是在可能的情况下,不要在可以帮助的根目录中包含任何php文件。

所以,我想知道的是,如果我想包括一个PHP文件存储在根目录外面,比如说,在另一个目录中,对我来说最安全的方法是什么?

+0

通过'root'你的意思是你可公开访问的文件夹又名'public_html'? – F21 2012-07-07 10:40:47

+0

是的,所以有人可能进入并干扰损坏的文件夹 – Kalcoder 2012-07-07 10:45:08

回答

1

这不会直接回答您的问题,但也许它会让您以不同的方式查看您的应用程序结构。我认为这是一个误解,它是不安全包含来自您的webroot之外的文件。

相反,很多人都有一个结构,其中大多数不是所有的应用程序逻辑都在public_html或类似的目录之外。尤其适用于所有路由器类型的系统。

你可以有一个结构是怎样的:

var 
    www 
     public 
      something.js 
      happy.jpg 
      index.php 
     application 
      bootstrap.php 
      AwesomeClass.php 
      Router.php 

现在你index.php你可以制定出真正您的应用程序。

喜欢的东西:

define('WEB_ROOT', __DIR__); 
define('APP_ROOT', dirname(__DIR__)); 
define('PHP_ROOT', APP_ROOT . DIRECTORY_SEPARATOR . 'application'); 

你现在有指向你的公共html目录的实际文件系统路径和你的PHP文件是常量,现在可以安全地包括像文件:

include(PHP_ROOT . DIRECTORY_SEPARATOR . 'bootstrap.php');

这是非常安全的,许多人都有这样的应用程序结构。如果你没有任何.htaccess或类似的巫术,那么它也会阻止人们浏览任何你正在铺设的php文件。

+0

有趣的是,试验前两个定义在那里,但问题....如何DIRECTORY_SEPARATOR是否工作?它有什么作用? – Kalcoder 2012-07-07 13:55:29

+0

@Kalcoder:它是一个操作系统特定的常量。在Windows上它是'\',在* nix/BSD上是'/'。所以你的文件路径总是有正确的。 – Leigh 2012-07-07 14:20:23

+0

啊我看到了,所以基本上它会确保它或者需要是例如home/somefolderoutsideofpublic/fileimgoingtouse.php或home \ somefolderoutsideofpublic \ fileimgoingtouse.php,确定很酷很有意义,谢谢! – Kalcoder 2012-07-07 14:24:39

0

从你的问题,我相信你想防止目录travesal(人们试图让你的脚本包括/ etc/passwd等)。

在请求的路径上使用realpath。这应该扩大了所有的../..

一旦做到这一点,你检查由realpath()针对白名单返回的结果或将其限制在自己的目录,并检查file_exist()file_exist('myfolder' . DIRECTORY_SEPERATOR . $resultFromRealPath())

+0

可能,现在阅读...... – Kalcoder 2012-07-07 11:18:18

相关问题