CGI :: Fast без временных файлов для загрузки - PullRequest
0 голосов
/ 26 марта 2019

Я хочу загрузить некоторые относительно конфиденциальные данные на сервер, которые не должны храниться на диске в виде открытого текста - мне кажется, слишком легко перехватить временный файл и скопировать содержимое, плюс возникнут проблемы безопасного удаленияфайл против восстановления / записей журнала и т. д. Я понимаю, что теоретически мог бы сделать это на стороне клиента, но предпочел бы решение на стороне сервера, чтобы необычный браузер не обрабатывал загрузку.

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 голосов
/ 26 марта 2019

Как только объект 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 интерпретировали ловушку загрузки как инициализатор и пропускали принятие запроса.

...