Controles de Segurança
Status dos Controles
Seção intitulada “Status dos Controles”Todos os 15 controles foram implementados e verificados. Nenhum pendente.
| # | Controle | Status | Detalhes |
|---|---|---|---|
| 1 | HSTS | Implementado | max-age=31536000; includeSubDomains |
| 2 | CSP | Implementado | Whitelist: Turnstile, Maps, Tailwind, VTEX, Azure, AirOps |
| 3 | X-Frame-Options | Implementado | DENY — impede framing/clickjacking |
| 4 | X-Content-Type-Options | Implementado | nosniff — impede MIME sniffing |
| 5 | Referrer-Policy | Implementado | strict-origin-when-cross-origin |
| 6 | Permissions-Policy | Implementado | camera=(), microphone=(), geolocation=(self) |
| 7 | Rate Limit (Auth) | Implementado | 5/15min login, 3/h register, 10/15min guest |
| 8 | Rate Limit (Internal) | Implementado | 100/min por IP |
| 9 | CORS | Implementado | Restrito a profarma.dev domains |
| 10 | JWT HttpOnly Cookie | Implementado | Secure, SameSite=Lax, 12h TTL |
| 11 | Turnstile Anti-Bot | Implementado | Login, guest verify, app access |
| 12 | RBAC (isAdmin) | Implementado | requireAdminAuth em todas as rotas admin |
| 13 | Error Sanitization | Implementado | Zero err.message em responses 500 |
| 14 | Debug Endpoints | Implementado | Removidos (/test-vtex, /debug-sync) |
| 15 | Debug Headers | Implementado | Zero x-debug-*, x-profarma-* |
Detalhamento
Seção intitulada “Detalhamento”HTTP Security Headers
Seção intitulada “HTTP Security Headers”Todos os responses incluem os seguintes headers:
Strict-Transport-Security: max-age=31536000; includeSubDomainsX-Frame-Options: DENYX-Content-Type-Options: nosniffReferrer-Policy: strict-origin-when-cross-originPermissions-Policy: camera=(), microphone=(), geolocation=(self)Content-Security-Policy: default-src 'self'; script-src 'self' https://challenges.cloudflare.com ...; [truncated]Content Security Policy (CSP)
Seção intitulada “Content Security Policy (CSP)”A CSP permite apenas origens necessárias:
| Diretiva | Origens Permitidas |
|---|---|
default-src | 'self' |
script-src | 'self', challenges.cloudflare.com |
style-src | 'self', 'unsafe-inline', CDN Tailwind |
img-src | 'self', data:, VTEX CDN |
connect-src | 'self', *.profarma.dev, Azure AD, VTEX, AirOps |
frame-src | challenges.cloudflare.com |
font-src | 'self', Google Fonts |
Rate Limiting
Seção intitulada “Rate Limiting”Implementado em memória (per-isolate), com contadores por IP:
| Endpoint | Limite | Janela | Resposta |
|---|---|---|---|
POST /auth/login | 5 | 15 min | 429 Too Many Requests |
POST /auth/register | 3 | 1 hora | 429 |
GET/POST /auth/guest/verify | 10 | 15 min | 429 |
Internal API (X-Internal-API-Key) | 100 | 1 min | 429 |
Apenas 4 domínios corporativos permitem cross-origin:
profarma.devprofarma.com.brgrupoprofarma.com.brreded1000.com.br
JWT Session
Seção intitulada “JWT Session”| Propriedade | Valor |
|---|---|
| Algoritmo | HMAC-SHA256 |
| Secret | AUTH_SECRET (64 chars, crypto-random) |
| TTL | 12 horas |
| Cookie name | profarma_session |
| HttpOnly | Sim |
| Secure | Sim |
| SameSite | Lax |
| Role | Verificação | Acesso |
|---|---|---|
| Admin | requireAdminAuth (email in admin_emails) | Todas as rotas |
| User | JWT válido | Apps publicados + Turnstile |
| Guest | JWT guest + allowedApps | Apenas apps do convite |
Error Sanitization
Seção intitulada “Error Sanitization”- Responses 500 retornam
{ error: "Internal server error" }— nunca oerr.messageoriginal - Stack traces removidos em produção
- Zero informação de debug em qualquer response de erro
Debug Endpoints (Removidos)
Seção intitulada “Debug Endpoints (Removidos)”Os seguintes endpoints de debug foram identificados e removidos durante o hardening:
— removido/test-vtex— removido/debug-sync— removido/api/debug/*
Debug Headers (Removidos)
Seção intitulada “Debug Headers (Removidos)”- Zero headers
x-debug-*em qualquer response - Zero headers
x-profarma-*em qualquer response - Zero headers revelando stack/versão (exceto
cf-*do Cloudflare — gerenciados por eles)
Cloudflare WAF (Infraestrutura)
Seção intitulada “Cloudflare WAF (Infraestrutura)”Além dos controles implementados no Worker, o Cloudflare fornece:
| Regra | Status |
|---|---|
| OWASP Core Rule Set | Ativo |
| Cloudflare Managed Rules | Ativo |
| Bot Fight Mode | Ativo |
| DDoS Protection | Ativo |
| TLS 1.3 (ZRT) | Ativo |
| TLS Minimum 1.2 | Enforced |
| Always Use HTTPS | Ativo |