上传文件时禁止 Apache 403
Posted
技术标签:
【中文标题】上传文件时禁止 Apache 403【英文标题】:Apache 403 Forbidden When Uploading Files 【发布时间】:2013-06-09 05:42:42 【问题描述】:当我提交带有输入文件的 multipart/form-data 表单时,我遇到了一个奇怪的 apache 错误。似乎只有当我上传 70kb 或更大的文件时才会发生这种情况。
这是我的 php.ini 设置:
file_uploads = On
upload_max_filesize = 10M
max_execution_time = 90
max_input_time = 90
memory_limit = 196M
post_max_size = 10M
这是 test.php 中的 html:
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="pdfMagazine" />
<input type="submit" value="Save" name="saveMagazine" />
</form>
这是错误:
Forbidden
You don't have permission to access /test.php on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Apache/2.2.24 (Unix) mod_ssl/2.2.24 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4 Server at myserver.com Port 80
以下是有关环境的更多详细信息:
Apache 没有安装 mod_security,没有.htaccess
限制文件上传
仅记录存在 403 代码的点
我试过的test.php权限是755和644
如果没有上传文件,表单提交正常。
谁能帮帮我?
提前致谢。
[更新]
看来服务器确实安装了 mod_security,这里是 apache 原始日志:
[Wed Jun 12 19:48:01 2013] [error] [client x.x.x.x] mod_security: Access denied with code 403. read_post_payload: Failed to create file "/root/tmp/20130612-194801-190.115.8.74-request_body-deJpho" because 13("Permission denied") [severity "EMERGENCY"] [hostname "myserver.com"] [uri "/test.php"]
[Wed Jun 12 19:48:01 2013] [error] [client x.x.x.x] mod_security: sec_filter_in: Failed to open file "/root/tmp/20130612-194801-190.115.8.74-request_body-deJpho" [hostname "myserver.com"] [uri "/403.shtml"]
做研究我发现了这个:
**Upload tmpdir issues**
Seeing this?
<source lang='php'> [Fri Nov 18 14:49:50 2011] [error] [client 72.52.142.215] mod_security: Access denied with code 406. read_post_payload: Failed to create file "/root/tmp/20111118-144950-72.52.142.215-request_body-xGPNPd" because 13("Permission denied") [severity "EMERGENCY"] [hostname "lakedonpedro.org"] [uri "/wp-cron.php?doing_wp_cron"] [unique_id "TsbhJkg0jtcAACYIFDk"] </source>
This actually happens because PHP's being set to use /root/tmp and the upload tmp dir. Let's set a few things then! Yay!
Make sure these are all set in /usr/local/lib/php.ini (session.save_path will probably already be set)
upload_tmp_dir = /tmp
session.save_path = /tmp
Make sure these are all set in /usr/local/apache/conf/modsec2.user.conf (or the applicable file for your system)
SecUploadDir /tmp
SecTmpDir /tmp
Restart the apachies.
It also seems it has worked adding the above to modsec.conf corrects this issue. per ~awilson
我确实更改了 php.ini,但 modsec 配置文件有一个很大的警告,只有服务器提供商可以编辑它,所以我正在联系他们。
我会让你知道发生了什么。
[已解决]
Apaches 模块 mod_security 默认有 60kb 的上传限制,所以任何更大的上传都会抛出 403 错误代码。
由于 modsec.conf 只能由服务器提供商编辑,我将以下行添加到每个根 .htaccess:
SecFilterEngine Off
这通常会关闭 mod_security 过滤器。
【问题讨论】:
对 /var/www 文件夹和 test.php 的所有父文件夹执行 ls -ltr。将该信息放入问题中 【参考方案1】:Apaches 模块 mod_security 默认有 60kb 的上传限制,所以任何更大的上传都会抛出 403 错误代码。
由于 modsec.conf 只能由服务器提供商编辑,我将以下行添加到每个根 .htaccess:
SecFilterEngine Off
这通常会关闭 mod_security 过滤器。
【讨论】:
请注意,“[s] 对 .htaccess 文件的支持在 2.x 中已停止,因为它引发了太多安全问题”(Kakawait)并且“这可能导致错误 500(内部服务器错误)如果您不允许关闭 SecFilterEngine”(Low)。以上是关于上传文件时禁止 Apache 403的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中使用 REST API 将图像上传到 S3 存储桶,出现禁止错误:403