Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php需要文件路径转义_Php_Security - Fatal编程技术网

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所以你想说,即使我需要另一个文件,我也不能用它做点什么?听起来像是真的。