CAFÉ AURORA — WEB II — CHECKPOINT DO CAPÍTULO 7

Este checkpoint serve para conferência ou retomada depois da construção prática.
Ele inclui os capítulos anteriores e acrescenta uma área protegida para consultar as mensagens.

COMO EXECUTAR
1. Abra a pasta cafe-aurora-web2 no VS Code.
2. Confira o PHP, o driver SQLite e a sintaxe:
   php -v
   php -m | findstr /I "PDO sqlite"
   php -l src/autenticacao.php
   php -l src/criar-administrador.php
   php -l public/admin/entrar.php
   php -l public/admin/painel.php
   php -l public/admin/sair.php
3. Prepare o banco:
   php src/inicializar-banco.php
4. Crie sua credencial local:
   php src/criar-administrador.php
5. Informe um usuário e uma senha exclusiva com, no mínimo, 12 caracteres.
6. Inicie o servidor:
   php -S localhost:8000 -t public
7. Envie mensagens em http://localhost:8000/contato.php.
8. Acesse http://localhost:8000/admin/entrar.php e entre com sua credencial.
9. Confira a ordem dos registros e aplique o filtro por assunto.
10. Use o botão Sair e confirme que o painel volta a exigir autenticação.

O QUE FOI ACRESCENTADO
- configuração da credencial fora da pasta pública;
- senha transformada em hash por password_hash;
- verificação por password_verify;
- renovação do identificador da sessão depois da entrada;
- proteção das rotas administrativas;
- cabeçalho no-store nas páginas com dados pessoais;
- consulta SELECT com ordem e limite explícitos;
- filtro por assunto com consulta preparada;
- saída escapada para nomes, contatos, assuntos e mensagens;
- tabela com cabeçalhos semânticos e rolagem em telas estreitas;
- encerramento de sessão por POST com token CSRF.

CONFIRA
- dados/administrador.php e o banco não aparecem no repositório;
- a senha em texto aberto não é gravada;
- painel.php sem sessão redireciona para entrar.php;
- usuário ou senha incorretos mostram uma mensagem genérica;
- o filtro aceita somente assuntos previstos;
- mensagens com sinais de HTML são mostradas como texto;
- o painel limita a leitura aos 50 registros mais recentes;
- depois de sair, voltar ao painel exige nova autenticação.

IMPORTANTE
- esta autenticação é uma base didática, não um pacote completo de produção;
- ainda faltam limite de tentativas, recuperação de senha, HTTPS obrigatório,
  autorização por perfis, auditoria e política de retenção;
- não publique dados/administrador.php, o banco ou informações pessoais;
- noindex não protege uma página: a proteção real está na sessão exigida pelo PHP;
- o próximo capítulo continuará o CRUD, permitindo atualizar o estado do atendimento.
