用于接受不同上载文件的Perl / CGI脚本

时间:2014-01-31 19:16:31

标签: perl file-upload cgi

与此相关 - https://stackoverflow.com/questions/21487257/a-perl-cgi-script-for-uploading-files - 问题,我还有另外一个:可以这样:  http://www.seaglass.com/file-upload-pl.html 脚本被修改,以便它接受不同的输入文件并将它们保存为不同的输出文件,而不仅仅是覆盖单个output文件? 我是Perl / CGI的新手,所以我不会看到明显的答案。

1 个答案:

答案 0 :(得分:2)

$basename中,您已拥有该文件的名称。您不必将上传的文件写入/tmp/outfile;您可以动态构建路径,具体取决于$basename

创建要放置文件的目录。我认为它仍然是C:\tmp。而不是

open(OUTFILE, ">/tmp/outfile")

open(OUTFILE, ">/tmp/$basename")

它应该有效。即使在$upfile创建之前,污点也会从GetBasename()$basename移除。但这仍然不安全。在将其提交给open()之前,您应该从文件名中删除所有不需要的字符,例如

$basename =~ s/[^A-Za-z0-9_.-]//g;
$basename =~ s/^[^A-Za-z0-9]*//;

如果$basename现在为空,则必须以其他方式选择名称。此外,如果已存在同名文件,则必须选择是要覆盖它还是组成唯一名称。我目前的解决方案只是覆盖。

如果您想了解有关正则表达式的更多信息,请查看perlre手册页。