# ═══════════════════════════════════════════════════════════════════════════
#  O QUE O APACHE NÃO PODE ENTREGAR
# ═══════════════════════════════════════════════════════════════════════════
#
#  O que estava acontecendo, em 11/09/2026, sem ninguém ter feito nada errado:
#
#    http://servidor/River/app/db/           →  índice navegável da pasta
#    http://servidor/River/app/db/mestre.db  →  o banco MESTRE, 300 KB
#    http://servidor/River/app/db/jauru.db   →  o banco do cliente, 5,7 MB
#    http://servidor/River/app/config.php.bak_antes_ordem  →  o código-fonte
#
#  Nenhum deles pede login. Arquivo estático não passa por PHP: o Apache
#  entrega antes de qualquer linha nossa rodar. `requireLogin()` protege as
#  TELAS, e o banco não é uma tela.
#
#  O mestre.db carrega o hash de senha de todos os usuários do sistema,
#  superadmin incluído. Quem o baixa leva o sistema inteiro para casa e quebra
#  as senhas offline, no tempo dele, sem deixar uma linha no log.
#
#  Os `.bak_*` são piores do que parecem: o Apache não executa `.php.bak`, ele
#  MOSTRA. `config.php.bak_*` é a credencial do banco em texto puro.
#
#  ATENÇÃO — ISTO PODE NÃO ESTAR VALENDO. Um `.htaccess` só é lido quando o
#  Apache está com `AllowOverride` ligado, e é ignorado em silêncio quando não
#  está. Em nginx ele nunca é lido. É exatamente o tipo de proteção que a gente
#  acha que tem: o arquivo está no lugar, e a porta continua aberta.
#
#  Por isso existe `migracao/teste_exposicao.php`, que BAIXA estas URLs pelo
#  HTTP e reprova se vier conteúdo. Prova de que a porta fechou é a porta não
#  abrir — não o arquivo existir.
# ═══════════════════════════════════════════════════════════════════════════

# Sem índice de pasta. Sozinho não protege nada (quem sabe o nome baixa
# assim mesmo), mas tira o catálogo da mão de quem não sabe.
Options -Indexes

# Extensões que nunca devem ser servidas. Cobre banco, dump, despejo e,
# principalmente, TODO backup de fonte — `.bak`, `.bak_antes_x`, `.old`,
# `.orig`, `.save`, `~`.
<FilesMatch "(?i)(\.(db|db-shm|db-wal|sqlite|sqlite3|sql|json|log|ini|env|md|yml|yaml|lock|bak|old|orig|save|swp|swo|tmp)$|\.bak[_.-]|\.php\.|~$)">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Deny from all
    </IfModule>
</FilesMatch>

# Exceção declarada: os arquivos que o navegador PRECISA buscar.
# Sem isto, o bloco acima derrubaria o gráfico e a logomarca junto.
<FilesMatch "(?i)^(chart\.min\.js|.*\.(png|jpe?g|webp|gif|svg|ico|css|js))$">
    <IfModule mod_authz_core.c>
        Require all granted
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Allow from all
    </IfModule>
</FilesMatch>
