CGI :: Fast,无需上传临时文件

时间:2019-03-25 22:22:23

标签: perl fastcgi

我希望将一些相对敏感的数据上传到服务器上,而不应该以明文形式存储在磁盘上-我认为拦截临时文件和复制内容太容易了,再加上安全删除的问题针对还原/日记条目等的文件 我意识到从理论上讲我可以在客户端上执行此操作,但是更喜欢服务器端的解决方案,因此不寻常的浏览器不会破坏上传。

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()那样接受此类挂钩代码。

1 个答案:

答案 0 :(得分: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将上载挂钩解释为初始化程序,并且会跳过接受请求的过程。