访问根目录之外的 php 文件最安全的方法是什么?



我试图在stackoverflow的其他地方和网络上的其他地方搜索它。

似乎无法牢牢锁定一个表明这是最安全方法的答案。

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

所以,我想找出的是,如果我想包含一个存储在根目录之外的 php 文件,比如说,在另一个目录中,对我来说最安全的方法是什么?

这不会直接回答你的问题,但也许它会让你以不同的方式看待你的应用结构。我认为这是一种误解,认为包含来自 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');

这是完全安全的,许多人都有这样的应用程序结构。它还防止人们浏览到您放置的任何 php 文件,以防您没有任何.htaccess或类似的巫毒教。

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

在请求的路径上使用真实路径。这应该扩展所有../..等。

完成此操作后,您可以对照白名单检查realpath()返回的结果,或将其限制在您自己的目录中,并检查file_exist()file_exist('myfolder' . DIRECTORY_SEPERATOR . $resultFromRealPath())

最新更新