Backlog Unificado
Projeto: RioNoTeatro. Fonte principal: /www/wwwroot/rionoteatro.com.br/docs/BACKLOG.md.
Modo read-only: ações de escrita ficam disponíveis apenas para o Cérebro.
Sem itens pendentes em /www/wwwroot/rionoteatro.com.br/docs/BACKLOG.md.
Especificações Disponíveis (fora da fila pendente)
- BK-136
- BK-137
- BK-138
- BK-147
- BK-148
- BK-149
- BK-150
- BK-151
- BK-156
- BK-158
- BK-159
- BK-160
- BK-161
- BK-162
- BK-163
- BK-164
- BK-165
- BK-166
- BK-170
- BK-171
- BK-172
- BK-177
- BK-183
- BK-186
- BK-187
- BK-189
- BK-190
- BK-191
- BK-192
- BK-193
- BK-195
- BK-196
- BK-197
- BK-198
- BK-199
- BK-201
- BK-205
- BK-207
- BK-208
- BK-209
- BK-210
- BK-211
- BK-212
- BK-213
- BK-214
- BK-215
- BK-216
- BK-217
- BK-218
- BK-219
- BK-220
- BK-221
- BK-229
- BK-230
- BK-231
- BK-232
- BK-233
- BK-234
- BK-235
- BK-236
- BK-239
- BK-240
- BK-241
- BK-242
- BK-243
- BK-244
- BK-245
- BK-246
- BK-248
- BK-249
- BK-250
- BK-251
- BK-252
- BK-253
- BK-254
- BK-255
- BK-256
- BK-257
- BK-258
- BK-259
- BK-260
- BK-261
- BK-262
- BK-263
- BK-264
- BK-265
- BK-266
- BK-267
- BK-268
- BK-269
- BK-270
- BK-271
- BK-272
- BK-275
- BK-276
- BK-277
- BK-278
- BK-279
- BK-280
- BK-295
- BK-313
Detalhe do BK Selecionado
/www/wwwroot/rionoteatro.com.br/docs/backlog/BK-255-hardening-borda-php-nginx-waf.md • 2026-04-11T09:06:22.891Z
BK-255 - Hardening de borda: PHP-FPM, Nginx, headers e WAF
Objetivo
Registrar e arbitrar com calma as recomendações externas de segurança recebidas após o incidente de abuso automatizado em 2026-04-11, separando:
- o que é válido
- o que é parcialmente válido
- o que é perigoso aplicar cru no ambiente real do RNT
Estado real confirmado do ambiente
- stack atual: aaPanel + Nginx + PHP 5.6
- o tráfego atual mostra socket
php-cgi-56.socknos logs do Nginx - HSTS já aparece no
curl -I https://rionoteatro.com.br X-Powered-Bynão apareceu nocurl -Iatual- o projeto usa:
shell_execffmpeg- rotinas de browser automation
- scrapers/bots
- integrações de login e pagamento
Logo, snippets genéricos de “hardening PHP” e “vhost seguro” não podem ser aplicados literalmente sem arbitragem.
Revisão do snippet de PHP recebido
Válido
display_errors = Offdisplay_startup_errors = Offlog_errors = Onerror_reporting = E_ALLexpose_php = Offsession.cookie_httponly = Onsession.cookie_secure = Onsession.use_strict_mode = On
Parcialmente válido
error_log = /www/wwwroot/rionoteatro.com.br/logs/php_errors.log
Observação:
- registrar erros em arquivo próprio é bom
- mas log dentro do webroot só é aceitável se o caminho estiver realmente inacessível pela web
- melhor ainda seria log fora do docroot ou negar o diretório explicitamente no Nginx
Potencialmente ruim para o RNT
session.cookie_samesite = Strict
Risco:
- pode quebrar fluxos legítimos de retorno vindos de:
- login social
- gateways
- outras navegações cross-site esperadas
Leitura atual:
- para o RNT,
Laxtende a ser mais seguro operacionalmente do queStrict
upload_max_filesize = 5Mpost_max_size = 8M
Risco:
- o RNT trabalha com mídia, imagens, PDFs e arquivos maiores
- aplicar esses limites crus tem grande chance de quebrar uploads legítimos
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source
Risco:
- isso quebra recursos atuais do próprio projeto
- hoje o RNT usa
shell_execem fluxos reais de: - scrapers
- bot
- automação social
- geração de mídia
- integração com ffmpeg/chrome/node
Conclusão:
- a parte de
display_errors/log_errors/expose_phpé boa - a parte de
SameSite, limites de upload edisable_functionsprecisa ser decidida com base no comportamento real do produto, não por snippet genérico
Revisão do vhost Nginx recebido
Válido
X-Frame-OptionsX-Content-Type-OptionsReferrer-Policyserver_tokens off- negar acesso a
.env,.git,.user.ini,.log,.sql,.bak limit_req_zoneelimit_reqcomo camada de borda- bloquear scanners óbvios por user-agent com lista conservadora
Parcialmente válido
- bloqueios por querystring para padrões como:
dbms_pipewaitfor delaysleep(union select
Leitura:
- útil como filtro de ruído
- não substitui correção do app
- precisa ser conservador para não gerar falso positivo em querystrings legítimas
Problemático se aplicado cru
- o snippet redefine
fastcgi_passmanualmente em várioslocation
Risco:
- o RNT já usa
include enable-php-56.conf - sobrescrever partes do roteamento PHP sem reconciliar com o vhost atual do aaPanel pode quebrar o site
- o snippet usa rotas genéricas como:
/cadastre-se.php/comentario.php/avaliacao.php
Problema:
- isso não cobre os endpoints reais confirmados no incidente, por exemplo:
/action.php/includes/ajax_palcofan.php/painel/action.php/painel/modulos/profile/action.php/produtor/modulos/profile/action.php/produtor/modulos/eventos/action.php
X-XSS-Protection
Leitura:
- header legado/obsoleto
- pode até ficar, mas não deve ser tratado como defesa relevante
- bloquear user-agent amplo demais
Exemplo de risco:
- listas como
curlou clientes genéricos podem atingir tráfego legítimo de healthcheck ou integração
Decisão operacional
Não aplicar cegamente
Não substituir o vhost inteiro por esse arquivo “completo” sem:
- diff contra o vhost atual real
- reconciliação manual
- validação de
nginx -t - teste de rotas críticas
Caminho correto
- levantar o vhost atual real do RNT
- enxertar apenas:
- headers úteis
- deny rules úteis
- rate limit bem calibrado
- filtros conservadores de querystring
- aplicar rate limit nas rotas reais
- preservar includes e sockets já usados pelo aaPanel
Rotas reais candidatas para rate limit de borda
Públicas
/action.php/includes/ajax_palcofan.php
Painel cliente
/painel/action.php/painel/modulos/profile/action.php
Painel produtor
/produtor/action.php/produtor/modulos/profile/action.php/produtor/modulos/eventos/action.php
Próximos passos
- capturar o vhost atual real e revisar por diff/hunk
- mapear quais
locationjá existem e não podem ser sobrescritos cegamente - definir um pacote mínimo de headers
- definir rate limit por endpoint real
- decidir política de
expose_php,error_logeSameSite - avaliar borda com Cloudflare/WAF depois da camada app