首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >$ CGI :: POST_MAX不会在CGI v.4.40上验证POST

$ CGI :: POST_MAX不会在CGI v.4.40上验证POST
EN

Stack Overflow用户
提问于 2019-03-15 05:09:31
回答 1查看 0关注 0票数 0

我花了一个小时试图让$ CGI :: POST_MAX在我写的脚本中工作。

我阅读了很多文档和示例,所有这些都不适用于我的案例。

首先让我们从下面的示例代码开始:

代码语言:javascript
复制
#!/usr/bin/perl

use strict;
use warnings;

use CGI qw/:standard cookie/;
$CGI::POST_MAX= 1024 * 1024 * 2;  # max 2MB
$CGI::DISABLE_UPLOADS = 1; # no uploads
use CGI::Carp qw(fatalsToBrowser);

my $q = CGI->new();

print "Content-type:text/html\n\n";
print "ERROR: $q->cgi_error()";
exit 0;

我需要(并且从上面的示例中可以清楚地看到)通过POST请求阻止加载超过2MB的任何数据并引发一个简单的标准错误(所有这些都是根据文档CGI.pm 4.40准确的)。

但这不起作用。无论我的移动电话$CGI::POST_MAX= 1024 * 1024 * 2;$CGI::DISABLE_UPLOADS = 1;所有在我的完整代码,我是否更改任何值他们-什么都没有。该脚本传递任何数据(3,4和更多MB)。

如果我在CGI.pm的文档中检查字段:

此错误消息实际上由HTTP协议定义,旨在作为CGI脚本的状态代码返回到浏览器。例如:

代码语言:javascript
复制
 my $uploaded_file = $q->param('upload');
 if ( !$uploaded_file && $q->cgi_error() ) {
     print $q->header( -status => $q->cgi_error() );
     exit 0;
}

尝试发送大于$ POST_MAX字节的POST将导致param()返回空的CGI参数列表。

该字段包含有效的文件名,并且没有任何描述(所有字段必须为空,同时超出最大限制)。

我在Ubuntu 18.04上使用最新的Perl 5.26.1。CGI.pm是v.4.40,Apache 2.4.29。

我也尝试过CGI :: Safe,但没有运气。

如果你知道如何使它工作,我将感谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2019-03-15 14:53:43

为此,我决定使用Apache 2.4核心指令LimitRequestBody。它就像一个魅力。剩下的就是创建一个明亮的页面来覆盖它status 413,它已准备就绪。

.htaccess有了新线(我的文件被称为用户,下面的例子使用FilesMatch匹配任何文件名,如用户目录中与相应的.htaccess):

代码语言:javascript
复制
<FilesMatch "user">
    LimitRequestBody 1024
</FilesMatch>

它仅限于1024 bytes(例如)。

并将完整的补救措施添加到.htaccess中

代码语言:javascript
复制
RewriteEngine on
ErrorDocument 413 /cgi-bin/413.cgi

完成。

这种方法比使用Perl更有效,因为我们可以在服务器级别中断上传,这是一个好主意。

我希望它能帮助处理类似问题的其他人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档