是否可以在执行之前对包含进行清理以确保它存在于服务器上?
我想避免攻击者使用某种白名单破坏文件路径,这可能吗?
我的包含看起来像这样:
require_once('../includes/front/header.php');
是否可以在执行之前对包含进行清理以确保它存在于服务器上?
我想避免攻击者使用某种白名单破坏文件路径,这可能吗?
我的包含看起来像这样:
require_once('../includes/front/header.php');
路径怎么可能被破坏?(除非您require_once
包含用户输入 - 避免这种情况!)
您可以使用以下命令检查文件是否存在file_exists
:
例如。
if(file_exists('../includes/front/header.php')) {
require_once('../includes/front/headers.php');
}
如果您确实想要一个白名单,尽管您可以创建一个允许array
的路径/文件名,然后仅用于检查其有效性。in_array
应该可以使用 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 脚本中并且不接受用户输入的文件名,那么您不需要清理自己的文件名/路径
您可以编写自己的包含,它可以针对“允许”路径列表进行验证。
即使用上述方法,但将其包装在一个函数中。