CGI :: Fast没有用于上传的临时文件

问题描述 投票:0回答:1

我希望将一些相对敏感的数据上传到服务器,该服务器不应以明文形式存储在磁盘上 - 我认为它很容易拦截临时文件并复制内容,而且会出现安全删除文件的问题。恢复/日记条目等我知道我理论上可以做这个客户端,但更喜欢服务器端解决方案,所以一个不寻常的浏览器不会破坏上传。

Perl CGI :: upload_hook()似乎是一个完美的解决方案,在到达时应用加密。不推荐使用普通CGI,但是使用CGI :: Fast,无论是将调用置于循环内部还是外部,都不会访问钩子代码。

use Sys::Syslog;
use CGI::Fast;
sub hook {
    my ( $filename, $buffer, $bytes_read, $data ) = @_;
    syslog('notice',"Hook used!");
}

#CGI::upload_hook(\&hook,'',0); # No good here either
while (my $q = CGI::Fast->new()) {
    CGI::upload_hook(\&hook,'data',0); # No effect
    syslog('notice',"Got a request!");    
    # (Access control code cut)
    print $q->header('text/plain','200 OK');
    print (Dumper($q));
}

从不调用hook()。 CGI :: Fast-> new()不像CGI-> new()那样接受这样的钩子代码。

perl fastcgi
1个回答
0
投票

创建CGI对象后,设置挂钩为时已晚。您可以使用以下内容:

while (1) {
    my $q = CGI::Fast->new(\&hook, 'data', 0)
       or die("Couldn't Accept FCGI request\n");

    syslog('notice',"Got a request!");
    # (Access control code cut)
    print $q->header('text/plain','200 OK');
}

请注意,这需要CGI :: Fast版本2.15或更高版本。早期版本的CGI :: Fast将上传钩子解释为初始化器,并且会跳过接受请求。

© www.soinside.com 2019 - 2024. All rights reserved.