我希望将一些相对敏感的数据上传到服务器上,而不应该以明文形式存储在磁盘上-我认为拦截临时文件和复制内容太容易了,再加上安全删除的问题针对还原/日记条目等的文件 我意识到从理论上讲我可以在客户端上执行此操作,但是更喜欢服务器端的解决方案,因此不寻常的浏览器不会破坏上传。
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()那样接受此类挂钩代码。
答案 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将上载挂钩解释为初始化程序,并且会跳过接受请求的过程。