我希望允许用户浏览我的Web服务器文件系统的一部分,确保他们无法访问父目录。此部分是动态的,因此无法定义。
我认为我最好的选择是将用户提供的相对路径附加到常量基本路径上,即:
use Cwd;
use CGI qw/:standard/;
use File::Spec::Functions;
my $base_path = catfile( getcwd, 'base' );
my $rel_path = param('rel_path');
my $full_path = catfile( $base_path, $rel_path );
print $full_path;
我必须对用户提供的相对路径/完整路径执行哪些验证/清理。我不是100%肯定用户可以操纵相对路径的方式,并且违反了系统和应用程序的完整性。
谢谢,
克里斯
答案 0 :(得分:0)
只需检查$ full_path是否在前面有$ base_path。
unless ( $full_path =~ m{^$base_path} ) { $full_path = $base_path; }
或者在$ rel_path中明确禁止双点:
$rel_path = '' if $rel_path =~ /\.\./;