【问题标题】:Perl webscript doubtful securityPerl webscript 令人怀疑的安全性
【发布时间】:2015-04-15 19:25:39
【问题描述】:

最近在一个项目中,我继承了一个简单的 perl 脚本,可以生成页面的 PDF:

#!/usr/bin/perl
use CGI;

my $file="showdata.pdf";
my $filepath= "/tmp/$file";
system("wkhtmltopdf \"sample.com/showdata.php?".$ENV{"QUERY_STRING"}."\" $filepath");
print ("Content-Type:application/x-download\n");
print ("Content-Disposition: attachment; filename=$file\n\n");

open FILE, "< $filepath" or die "can't open : $!";
binmode FILE;
local $/ = \10240;
while (<FILE>){
    print $_;
}

close FILE;
unlink ($filepath);

我担心直接替换变量 $ENV{"QUERY_STRING"}。但是,在粗略的测试中,我没有发现任何问题。我无法在已知的可写目录中创建/删除文件。是我试的不好还是脚本应该没有问题?

【问题讨论】:

    标签: perl security cgi-bin


    【解决方案1】:

    是的,这是不安全的。如果 QUERY_STRING 是 "; rm -fr /; 会怎样?

    那么您的system 电话将是:

    wkhtmltopdf "sample.com/showdata.php?"; rm -fr /; /tmp/showdata.pdf
    

    【讨论】:

      【解决方案2】:

      直接访问 $ENV{"QUERY_STRING"} 是不安全的。就我而言,我的数字参数“o”必须强制为整数。有安全的脚本版本:

      #!/usr/bin/perl
      use CGI;
      my $query = new CGI;
      my $o = int($query->param('o'));
      my $file="showdata.pdf";
      my $filepath= "/tmp/$file";
      system("wkhtmltopdf \"sample.com/showdata.php?o=".$o."\" $filepath");
      print ("Content-Type:application/x-download\n");
      print ("Content-Disposition: attachment; filename=$file\n\n");
      
      open FILE, "< $filepath" or die "can't open : $!";
      binmode FILE;
      local $/ = \10240;
      while (<FILE>){
          print $_;
      }
      
      close FILE;
      unlink ($filepath);
      

      【讨论】:

        【解决方案3】:

        如果您担心安全性,请使用污染选项-T 运行您的 Perl 脚本。

        例如,以下脚本将暂停您的脚本并发出警告:Insecure $ENV{PATH} while running with -T switch at ./foo.pl line 4.

        #!/usr/bin/perl -T
        
        my $foo = $ENV{FOO};
        system("ls -l $foo");
        

        注意:如果您只需要警告,可以使用选项-t 代替-T

        【讨论】:

          猜你喜欢
          • 2012-08-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-21
          • 2018-10-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多