Higiene JWT (todos validados ao vivo)

DESTRUTIVO — só em localhost/lab. Nunca em produção. Só em alvo seu ou autorizado por escrito.

Os passos

12.1 alg:none: header {alg:"none"} + payload + assinatura vazia → 401 ✅. 12.2 Sem exp: payload {sub,role,iat} com secret real → 200 ETERNO → 🔴 achado 8 (fix de 1 linha: rejeitar sem exp). 12.3 Expirado: exp há 1 ano → 401 ✅. 12.4 Quebra offline: dicionário no HMAC → secret de 43 chars resiste ✅ (mas vive no repo → P0). 12.5 Design futuro: API keys (prefixo+hash+escopo+revogação) e RS256+JWKS por módulo.

PurpleLab // plataforma de treino ofensivo + defensivo // Fase 1 — portal dinamico