--- name: modsec SecRequestBodyNoFilesLimit causa 413 description: Apache+mod_security devolve 413 em POSTs grandes nao-multipart por default 1MB - fix em modsec2.user.conf type: feedback originSessionId: 4fcacab0-14f5-48d4-9ca9-322e9af89c9f --- # 413 do Apache em POST com body grande no-file Quando um endpoint do CI4 recebe POST `application/x-www-form-urlencoded` (ex: form com imagens base64 inline em campo de texto), o Apache responde **HTTP 413 Request Entity Too Large** com a pagina HTML padrao do Apache mesmo se nginx, php-fpm e .user.ini estiverem com limites altos. **Causa**: mod_security default - `SecRequestBodyLimit` = 128 MB (multipart com files) - `SecRequestBodyNoFilesLimit` = **1 MB** (form-urlencoded ou multipart sem file) `SecRequestBodyLimitAction ProcessPartial` so vale para `SecRequestBodyLimit`. Para `NoFilesLimit` o default eh REJECT — gera 413. **Why**: imagem colada num editor (Quill/TinyMCE) vai como texto base64 dentro do campo `corpo_html`. NAO conta como upload de arquivo. Estoura o 1MB silenciosamente. Servidor:cliente passa pelo nginx (ate 512m), Apache aceita, mas modsec corta antes de chegar ao PHP. **How to apply**: ao ver 413 do Apache (com template HTML padrao "Request Entity Too Large") em endpoint que recebe HTML rico/imagens base64: 1. Conferir `nginx -T | grep client_max_body_size` (deve ser >= tamanho esperado). 2. Conferir `.user.ini` post_max_size/upload_max_filesize. 3. **Conferir mod_security**: testar local com `curl -F "campo=@arquivo"` (file = passa pelo SecRequestBodyLimit, geralmente OK) vs `curl --data-urlencode "campo=..."` (no-file = pega `NoFilesLimit`). **Fix** em `/etc/apache2/conf.d/modsec/modsec2.user.conf`: ```apache SecRequestBodyLimit 536870912 SecRequestBodyNoFilesLimit 536870912 SecRequestBodyInMemoryLimit 134217728 ``` Reload: `/scripts/restartsrv_httpd` (cPanel) ou `apachectl graceful`. **Diagnostico definitivo**: olhar `/usr/local/apache/logs/modsec_audit.log`. Requests com 413 do user externo aparecem la com action `ProcessPartial`/reject. Requests locais via `--resolve` com upload `-F` PASSAM (porque caem no Limit, nao NoFilesLimit) — entao teste local engana. Aplicado pela primeira vez 2026-05-04 no servidor sistema.gotechbr.com.br para destravar agendamento de e-mail com imagem inline.