关闭超大文件上传的Apache连接

我目前正在一个用户可以上传文件的网站上工作。 我怎样才能防止大文件上传? 当时,没有选项(PHP的post_max_sizeupload_max_filesize )非常有用:文件完全上传。 我只是想通过过大的文件关闭连接(通过预先检查Content-Length HTTP标头,并在文件上传时检查)。 有没有Apache指令或PHP配置密钥?

感谢您的时间!

编辑:添加Apache conf(CentOS默认)。
EDIT2:增加了PHP conf(CentOS默认)。

编辑3:看起来,PHP关闭管道时,给一个太大的文件。 尽管如此,Apache仍然允许直到它结束。


好。

所以你面临的主要问题是在完成上载之后应用Apache指令LimitRequestBodyLimitXMLRequestBody 。 看起来像apache在检查大小之前正在等待临时文件夹中的完整文件。

因此,您需要在检测到太大的上传后立即切断连接。 一次一个mod_throttle是一个模块可以做到这一点。 检查这个替代mod_throttle servfault问题,你可以有一个带宽控制模块列表,可以满足你的需求。

例如,mod_bwshare可以限制每个客户端IP的带宽,但这不是每个请求的per_IP限制。 还有mod_quos,处理了很多下载事件的限制,但是我找不到很多上传管理的东西(只关闭早期的慢速上传)。 另请参阅限制上传的答案。

因此,您还可以检查操作系统级别限制(在TCP堆栈上)或高级防火墙功能(在servfault上询问)。

您也可以使用客户端限制工具,例如隐藏表单值或js上​​传器设置,但是就像客户端使用的任何东西一样,就安全性而言,您无法避免某人改变客户端限制。


你可以使用apache的LimitRequestBody 。 语法很简单(以字节为单位):

LimitRequestBody 10490000 # 10 MB

这对httpd.conf.htaccess ,如果你编辑httpd.conf (Ubuntu上的sudo service apache2 restart ),只需要注意重启。

如果您需要为每个文件设置限制(将头像上传限制为5 MB,但将附件限制为20 MB),则可以使用<Files>

<Files avatarUpload.php>
    LimitRequestBody 5242880 # 5 MB
</Files>

<Files attachmentUpload.php>
    LimitRequestBody 20971520 # 20 MB
</Files>
链接地址: http://www.djcxy.com/p/62093.html

上一篇: Close Apache connection with too large file uploads

下一篇: Java resumable hash computation