【问题标题】:CGI Upload Script in Perl [duplicate]Perl 中的 CGI 上传脚本 [重复]
【发布时间】:2013-10-26 18:19:15
【问题描述】:

我有一个用于上传的 cgi 脚本,如下所示

#!/usr/bin/perl
use CGI;
use CGI::Carp qw(fatalsToBrowser);

my $cgi = new CGI;
my $file = $cgi->param('file');
$file=~m/^.*(\\|\/)(.*)/; # strip the remote path and keep the filename
my $name = $2;
open(LOCAL, ">/home/Desktop/$name") or die $!;

while(<$file>) {
  $data .= $_;
}
print $cgi->header();
print "$file has been successfully uploaded... thank you.\n";
    print $data;

HTML文件如下

<html>
<head>
    <title>Test</title>
</head>

<body>
    <form enctype="multipart/form-data" action="upload.cgi" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
            Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
</body>
</html>

我现在遇到一个奇怪的错误..

软件错误:

是 htdocs/upload.cgi 第 9 行的目录。

如需帮助,请发送邮件至本网站的网站管理员,提供此错误信息以及错误的时间和日期。

【问题讨论】:

    标签: perl http upload cgi


    【解决方案1】:

    很可能是open中指定的路径

    open(LOCAL, ">/home/Desktop/$name") or die $!;
    

    指向一个目录。这可能是因为$name 为空(因此/home/Desktop/ 一个目录)或者目标名称是桌面下的一个目录。

    我不得不考虑更多,并尝试变得邪恶,但我相当确定有一些方法可以指定路径之外的路径,您打算允许邪恶的人在某些地方上传文件你没想到他们会这样。

    【讨论】:

    • 是否可以使用chroot 来防止目标目录之外的恶意行为?
    • @jingyu 这将是朝着正确方向迈出的一步,尽管您仍然会在此上传位置(“/home/Desktop”)遇到一些危险的可能性 - 写入用户空间。有人可能会覆盖目录中的文件,创建一个看起来的文件,比如说,你的硬盘是恶意软件,等等......
    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2012-01-19
    • 2012-03-10
    • 2015-05-27
    • 1970-01-01
    相关资源
    最近更新 更多