我试图在stackoverflow和网络上的其他地方搜索其他地方。
似乎无法牢牢锁定一个表明这是最安全的答案。
我知道最安全的方法是,在可能的情况下,不要在根目录中包含任何可以帮助它的php文件。
所以,我想要找到的是,如果我想在一个目录中包含一个存储在根目录外的php文件,比如说,在另一个目录中,对我来说最安全的方法是什么?
答案 0 :(得分: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文件。
答案 1 :(得分:0)
从您的问题来看,我认为您希望阻止目录传输(人们试图让您的脚本包含/ etc / passwd等)。
在请求的路径上使用realpath。这应该扩展所有../
,..
等。
完成此操作后,您会检查realpath()
针对白名单返回的结果,或将其限制在您自己的目录中,并检查file_exist()
:file_exist('myfolder' . DIRECTORY_SEPERATOR . $resultFromRealPath())
。