文件暂时上传到/ root / tmp而不是/ tmp

时间:2012-02-14 05:30:10

标签: php apache configuration upload

我有一个简单的上传表单,这里是开始和结束标记:

<form action="post.php" method="post" enctype="multipart/form-data">
</form>

我在提交时收到500内部服务器错误。 apache日志显示以下条目(主机名和ip编辑):

[Tue Feb 14 00:08:32 2012] [error] [client xxx.xxx.xxx.xxx] ModSecurity: Input filter: Failed to create temporary file: /root/tmp/20120214-000832-TznsTkPj2kkAAE5LYREAAAAB-request_body-xqZDkt [hostname "xxxxxxxxxx.com"] [uri "/app/221/product/post.php"] [unique_id "TznsTkPj2kkAAE5LYREAAAAB"]
[Tue Feb 14 00:08:37 2012] [error] [client xxx.xxx.xxx.xxx] ModSecurity: Input filter: Failed to delete temporary file: /root/tmp/20120214-000832-TznsTkPj2kkAAE5LYREAAAAB-request_body-xqZDkt [hostname "xxxxxxxxxx.com"] [uri "/app/221/product/post.php"] [unique_id "TznsTkPj2kkAAE5LYREAAAAB"]

我搜索了代码,在任何地方都没有提到rootupload_tmp_dir。所有代码文件都属于应用程序用户和组。在php.ini中,upload_tmp_dir最初没有设置,我现在将其设置为/tmp,但这也没有解决问题。

知道它为什么要上传到/root/tmp

1 个答案:

答案 0 :(得分:3)

看起来您应该检查ModSecurity settings,特别是 SecUploadDir 设置。

  

文件上传支持

     

ModSecurity能够拦截通过POST上传的文件   请求和multipart / form-data编码或(截至1.9)通过PUT   请求。

由于只有一个地方可以在PHP中设置该值,并且已经在运行时验证过,而且我们知道您从日志输出中运行了ModSecurity,看起来很可能就是这样。

每个OP的注释:

  

如果未设置SecUploadDir参数,则ModSecurity不会   忽略它。所以我们做了以下更改:SecUploadDir / tmp   SecTmpDir / tmp现在完美无缺。

我偶然发现你可以在这样的情况下尝试完全禁用mod安全性以查看是否可以消除问题。然后,您可以快速将问题缩小到mod安全性:

https://serverfault.com/questions/57210/disable-modsecurity-for-a-specific-directory