php需要文件路径转义
现在,我想知道只需要php需要文件路径转义,php,security,Php,Security,现在,我想知道只需要require($path)的文件是否安全 举个最简单的例子: 我有一些表单字段文件夹和名称。因此,当我执行require($somepath./'.$folder./'.$name..php')时,可以通过输入“../../admin/or/else/things/”轻松地重新定位它。 这是一个简单的例子,但(我希望如此)还有许多其他方法可以重新定位$path 所以问题是: -提供传入路径的检查? -如果是。。那么如何正确执行呢?如果您需要另一个文件,根据用户输入,您应该非
require($path)
的文件是否安全
举个最简单的例子:我有一些表单字段
文件夹
和名称
。因此,当我执行require($somepath./'.$folder./'.$name..php')
时,可以通过输入“../../admin/or/else/things/”轻松地重新定位它。这是一个简单的例子,但(我希望如此)还有许多其他方法可以重新定位
$path
所以问题是:-提供传入路径的检查?
-如果是。。那么如何正确执行呢?如果您需要另一个文件,根据用户输入,您应该非常仔细地验证文件夹和名称字段。你不想让用户需要他们自己的文件(可能是他们刚刚上传的文件)或任何其他讨厌的东西 理想情况下,您应该创建一个可接受值的列表,如下所示:
$allowedIncludes = array('a/foo.php', 'b/bar.php'); // etc
然后,您可以检查它们提供的名称和文件夹字段的组合是否有效:
if(false !== array_search("$folder/$name", $allowedIncludes) {
// OK
// require ...;
} else {
// not ok
}
但同样,在允许用户这样做时,要非常小心。你不想让人们在你的机器上执行任意代码。我的方法是:
/* Valid Pages' Array */
$pages['welcome']['title'] = 'Welcome!'; // Page Title
$pages['welcome']['path'] = './pages/welcome.php'; // Physical Valid Path
$pages['welcome']['login'] = false; // Log-in Required?
$pages['my-account']['title'] = 'My Account';
$pages['my-account']['path'] = './user/my_account.php';
$pages['my-account']['login'] = true;
/* Requested Page */
$page = !empty($_REQUEST['page']) ? $_REQUEST['page'] : 'welcome';
/* Including ... */
if (file_exists($pages[$page]['path']))
include($pages[$page]['path']);
else
include($pages['404']['path']);
require只能用于从其他PHP文件引入代码。在我看来,您不应该将表单字段值传递给它(另外,仅使用与变量同名的表单字段不会创建php变量)。你能详细说明一下你想做什么吗?你可能一开始就不应该允许用户这么做。如果你这样做,你的应用程序甚至你的服务器都会很容易受到威胁。@mtsvetkov所以你想说,即使我需要另一个文件,我也不能用它做点什么?听起来像是真的。