SIGN IN SIGN UP

Fase 18: revisão aprofundada de segurança

Sem achados CRITICAL/HIGH. Corrige: cookies de sessão/carrinho sem
secure; HTTPS não forçado em produção (força_ssl); Content-Security-
Policy totalmente desligada (política estrita, sem nada externo:
importmap vendoriza JS localmente, Tailwind é CSS local único, nonce
por requisição para o script do importmap); cupom e checkout sem rate
limit (força bruta de código/spam de tentativa); sessão de admin e de
cliente nunca expiravam (cookie permanent de 20 anos sem expiração no
servidor) — agora expiram por inatividade (7 dias admin, 30 dias
cliente), renovada a cada requisição autenticada.

Ambiente de teste trocou cache_store de :null_store para :memory_store
(com limpeza a cada exemplo/teste) — sem isso, rate_limit é
literalmente impossível de testar, já que depende de Rails.cache para
contar tentativas.

docs/security.md atualizado: dois TODOs desatualizados resolvidos
(limite de upload já decidido na Fase 1; rate limiting e headers
resolvidos agora), mais o registro das decisões desta fase.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JVmATxHWcsrRUtNEQB923F
U
Uriel Juliatti committed
670049b0d4274c49bdf7c99868e5c03aa819efad
Parent: 5614020