Apache在上传大文件时出现错误500(mod_security)

10

就我所尝试的而言,通常的解决方案都不适用于我的问题。我的问题是每次上传“大文件”(600 KB〜)时都会收到500错误,对于较小的图像,它可以正常工作。因此,即使使用这个(极端的).htaccess文件,它仍然会发生,是的,.htaccess已经启用:

upload_max_filesize = 100M
post_max_size = 100M
memory_limit = 128M
max_input_time = 6000
max_execution_time = 6000

那么,我查看日志并找到了这个(只有一行,为了易于阅读,将其粘贴在此):

[Mon Jul 27 17:09:28.<port> 2015] [:error] [pid 21423] [client <ip>]    
ModSecurity: Access denied with code 44 (phase 2). 
Match of "eq 0" against "MULTIPART_UNMATCHED_BOUNDARY" required. 
[file "/etc/httpd/conf.d/mod_security.conf"] 
[line "35"] [id "<another id>"] 
[msg "Multipart parser detected a possible unmatched boundary."] 
[hostname "<my host>"] [uri "<my script>"] [unique_id "<id (useless I think)"]

但是,我现在无法找到如何编辑mod_security(它有默认配置和未激活规则)的配置,以便(我认为)允许上传这个“大”文件。我正在运行Apache 2.4/CentOS 7中的PHP 5.3。

5个回答

13

如果您收到 ModSecurity alert 提示,则说明您不能有空的 activated_rules 文件夹,或者您是以其他方式包含规则。

对于此错误,ModSecurity已知存在问题,且似乎很容易出现误报。

当某个规则触发太多虚警时,主要建议是关闭该规则(我假设触发的是规则200003,但请根据情况替换ID):

SecRuleRemoveById 200003

添加了两个规则(我应用了2 MB),但它仍然返回500。 - Octal
你重启了Apache以应用这些更改吗?是规则ID 960915在触发吗?你是否在定义规则970915的配置之后添加了删除代码而不是之前? - Barry Pollard
是的,我每次都在重启Apache。不知道规则960915被“存储”在哪里,我只是把这行代码粘贴到了末尾。 - Octal
好的,但是你在粘贴时删除了ID,所以不确定它是否为960915。你需要查看Apache配置并了解规则何时以及如何加载。 - Barry Pollard
好的,我找到了这行代码: SecRule MULTIPART_STRICT_ERROR "!@eq 0"
"id:'<the id>',phase:2,t:none,log,deny,status:44,msg:'Multipart request body
failed strict validation, 并使用了您提供的removeByID函数来删除该ID,但它仍然存在。
- Octal
2
我不确定这是否是针对OP上传问题的可接受答案。难道不应该更新SecRequestBodyLimit来解决上传问题吗?默认值为12.5MB。 - Byron70

1
我遇到了同样的错误:
ModSecurity: 访问被拒绝,代码为44 (第二阶段)。匹配 "eq 0" 和 "MULTIPART_UNMATCHED_BOUNDARY" 是必需的。[文件 "/etc/httpd/conf.d/mod_security.conf"] [行 "34"] [id "200003"] [msg "Multipart parser detected a possible unmatched boundary."]
但是@nilpo的回答是正确的,我遇到了这个问题是因为图片名称,改变名称后问题得到解决。
但我并不想这样做,因为我知道解决方案,但我的客户不知道他们需要更改名称。

0

尝试检查fcgi配置中的FcgidBusyTimeout参数


页面返回了500错误,用了近700毫秒的时间,但结果只有3600。 - Octal

-1

重命名您正在尝试上传的文件。此错误表示文件名包含mod_security不允许的字符。请重新命名文件,然后再次尝试上传。通过禁用mod_security.conf中提到的行,它将愉快地跳过此检查,但这会使您的服务器容易受到漏洞攻击。


此答案不适用于此错误消息。文件名并非问题所在。 - Ross Presser

-3

我找到了解决方案!!!

UBUNTU 16.04 + Apache(我的mod_secure可以工作并上传成功)

0. 激活headers模块(激活headers和.htaccess)

1. 检查.htaccess文件!!!!

//在.htaccess中

php_value upload_max_filesize 50M

php_value post_max_size 50M

//如果你想在.htaccess中自定义

<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
  1. https://www.maketecheasier.com/securing-apache-ubuntu/ 命令说明

sudo nano /etc/apache2/mods-enabled/security2.conf - 最后两行我注释掉了

sudo nano /etc/modsecurity/modsecurity.conf - 配置mod_secure很容易

sudo nano /etc/apache2/apache2.conf - Apache配置CTRL+W

//开/关

bash->a2dismod mod-security2 //off

或者

bash->a2dismod security2 //off


bash->a2enmod mod-security2 //on
bash->a2enmod security2 //on
  1. 如果您想的话,可以删除特定的规则:

http://www.inmotionhosting.com/support/website/modsecurity/find-and-disable-specific-modsecurity-rules

在modsecurity.conf中使用SecRuleRemoveById 950004

4. Byteconverter - http://whatsabyte.com/P1/byteconverter.htm

够了!!!

4个小时!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接