apacheでは、httpd.confにLimitRequestBodyを指定
http://httpd.apache.org/docs/2.2/ja/mod/core.html
例えば、apacheで10kbyteの容量制限を行う場合、httpd.confに次のように記載します。
※grobal,
LimitRequestBody 10240
この状態で130kbyteのファイルをpostすると、サーバへの接続が切断され、access_logやerror_logには、次のように表示されさます。
access_log
192.168.0.1 - endou021 [22/Feb/2009:11:16:35 +0900] "POST <略> HTTP/1.1" 500 1188
error_log
[Sun Feb 22 11:16:35 2009] [error] [client 192.168.0.1] Requested content-length of 138833 is larger than the configured limit of 10240, <略> [Sun Feb 22 11:16:35 2009] [error] [client 192.168.0.1] (-3)Unknown error 4294967293: Error reading request entity data, <略>
CGI.pmでは、POST_MAXを指定
CGI.pmではPOST_MAXを指定することで、requestデータの容量を制限でき、POST_MAXより大きなファイルを受領した場合、cgi_errorで検知できます。
use CGI; $CGI::POST_MAX = 1024 * 100; #100kbyte my $q = CGI->new(); $q->param; #POST_MAXより大きなファイルを受領した場合、cgi_errorで検知 die($q->cgi_error) if ($q->cgi_error); my $fh = $query->upload('file') or die "can't upload file "; my $file = $query->param('file');
実際のサービスでは、LimitRequestBodyと$CGI::POST_MAXはどちらかを指定するのではなく、両方を指定しますよね。