关闭超大文件上传的Apache连接
我目前正在一个用户可以上传文件的网站上工作。 我怎样才能防止大文件上传? 当时,没有选项(PHP的post_max_size
和upload_max_filesize
)非常有用:文件完全上传。 我只是想通过过大的文件关闭连接(通过预先检查Content-Length
HTTP标头,并在文件上传时检查)。 有没有Apache指令或PHP配置密钥?
感谢您的时间!
编辑:添加Apache conf(CentOS默认)。
EDIT2:增加了PHP conf(CentOS默认)。
编辑3:看起来,PHP关闭管道时,给一个太大的文件。 尽管如此,Apache仍然允许直到它结束。
好。
所以你面临的主要问题是在完成上载之后应用Apache指令LimitRequestBody或LimitXMLRequestBody 。 看起来像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