1

是否可以在执行之前对包含进行清理以确保它存在于服务器上?

我想避免攻击者使用某种白名单破坏文件路径,这可能吗?

我的包含看起来像这样:

require_once('../includes/front/header.php');
4

3 回答 3

3

路径怎么可能被破坏?(除非您require_once包含用户输入 - 避免这种情况!)

您可以使用以下命令检查文件是否存在file_exists

例如。

if(file_exists('../includes/front/header.php')) {
  require_once('../includes/front/headers.php');
}

如果您确实想要一个白名单,尽管您可以创建一个允许array的路径/文件名,然后仅用于检查其有效性。in_array

于 2012-04-10T15:06:23.207 回答
1

应该可以使用 PHP 的file_exists函数和您的白名单:

$allowed_files = array('../includes/front/header.php','../includes/front/footer.php');
$include_file = <string with file/path>; //EG '../includes/front/header.php'

if (in_array($include_file,$allowed_files && file_exists($include_file)) {
    require_once($include_file);
}

如果您的路径被硬编码到 PHP 脚本中并且不接受用户输入的文件名,那么您不需要清理自己的文件名/路径

于 2012-04-10T15:03:29.157 回答
0

您可以编写自己的包含,它可以针对“允许”路径列表进行验证。

即使用上述方法,但将其包装在一个函数中。

于 2012-04-10T15:05:20.597 回答