Codificação Segura de Aplicações Web
Transforma o OWASP Top 10:2025, ASVS 5.0, a Cheat Sheet Series e material selecionado do WSTG em orientações práticas de segurança para aplicações web.
Padrão (inline): escreva código seguro silenciosamente; sinalize apenas o problema de maior impacto que você observar por perto.
Auditoria: ao usar "review", "audit", "harden", "is this secure?" ou acompanhamento de incidentes — leia assets/audit-checklist.md e produza descobertas priorizadas.
Modos, invocados como $secure-webapp <mode>:
$secure-webapp audit: revisão priorizada completa; leiaassets/audit-checklist.md.$secure-webapp quick-check: apenas passagem de maior risco — autorização, auth/sessão, segredos, injeção/XSS, uploads, SSRF, tokens. Sem relatório completo da lista de verificação.$secure-webapp harden: aplique alterações seguras diretamente onde as edições forem autorizadas; pequenos patches que preservem a arquitetura; verifique e sinalize qualquer coisa que precise de aprovação do produto.$secure-webapp remediate: loop iterativo auditoria→correção; leiaassets/remediate-checklist.mdna íntegra primeiro.$secure-webapp design-review: modelo de ameaças pré-implementação — suposições, limites de confiança, casos de abuso, controles obrigatórios, perguntas não resolvidas.$secure-webapp report: escreva um relatório formal emdocs/security-audit-report-YYYY-MM-DD.md; leiaassets/report-template.mdna íntegra primeiro e siga cada etapa. Requer uma auditoria anterior nesta sessão. Escreva no arquivo, nunca no chat.$secure-webapp update: auto-atualize esta instalação executandonpx --yes github:hov172/secure-webapp-skill --global. Ele verifica a versão e reinstala apenas quando uma versão mais recente existe. Flags:--claude/--codex/--gemini,--check,--force.$secure-webapp maintain: atualize o próprio pacote do skill, a partir de um clone do repositório fonte — vejascripts/README.md.
Carregue apenas as referências que a tarefa precisa. Nunca carregue todas de uma vez.
Roteamento
| Tarefa envolve | Carregar |
|---|---|
| Strings não confiáveis interpretadas como HTML/DOM/SQL/shell/NoSQL/LDAP/regex/CSV | references/input-handling.md |
| Login, cadastro, senhas, MFA, redefinição, força bruta, sessões, cookies, logout | references/auth-and-sessions.md |
| Permissões, papéis, verificações de propriedade, IDOR, isolamento de inquilino | references/authorization.md |
| JWTs, tokens de API/refresh, assinatura e verificação, OAuth/OIDC, PKCE, state | references/tokens-and-oauth.md |
| Endpoints REST/GraphQL/WebSocket, limites de taxa, mass assignment, forma da resposta, uploads/downloads, path traversal, URLs pré-assinadas | references/apis-and-files.md |
| Secure/HttpOnly/SameSite, CSP, CORS, CSRF, cabeçalhos, iframes, postMessage | references/frontend-and-headers.md |
Variáveis de ambiente, .env, chaves, gerenciador de segredos, modo de depuração, padrões | references/secrets-and-config.md |
| Criptografia, hash de senhas, algoritmos, gerenciamento de chaves, PII | references/data-and-crypto.md |
| Dependências, lockfiles, SBOM, CI/CD, GitHub Actions, artefatos assinados | references/supply-chain.md |
| URLs externas controladas pelo usuário, SSRF, condições de corrida, deserialização, prototype pollution | references/secure-coding.md |
| Logging, respostas de erro, stack traces, trilhas de auditoria, fail-closed, rollback | references/logging-and-errors.md |
| Design de novos recursos, modelagem de ameaças, multi-inquilinos, decisões seguras por design | references/insecure-design.md |
| Recursos de LLM/IA, construção de prompts, RAG, chamadas de ferramentas de agente, servidores MCP, saída do modelo renderizada ou executada | references/ai-and-llm.md |
Lista de Vigilância Sempre Ativa
Sinalize estes itens de passagem quando vistos em código web, com uma correção concreta:
- Verificações de autenticação/autorização no lado do servidor ausentes em rotas de recursos. Prefira escopo em nível de consulta, como
WHERE owner_id = :current_user. - Segredos codificados, credenciais, segredos JWT, chaves de API ou arquivos
.envcomprometidos. - Consultas SQL/NoSQL/shell construídas com strings. Use consultas parametrizadas, construtores seguros ou APIs argv.
- Senhas em texto plano ou com hash rápido. Use argon2id, scrypt ou bcrypt; PBKDF2 apenas quando necessário.
- Verificação JWT com algoritmos não fixados, verificações de
exp/iss/audausentes ou segredos no código. dangerouslySetInnerHTML,v-htmlouinnerHTMLcom conteúdo do usuário. Renderize como texto ou sanitize.- CORS com credenciais e origem curinga ou ecoada. Use uma lista de permissões estrita.
- Limites de taxa ausentes em login, cadastro, redefinição, MFA/OTP ou endpoints caros.
- Erros de produção verbosos, stack traces, detalhes SQL/ORM ou modo de depuração expostos aos clientes.
- Redirecionamentos abertos a partir de parâmetros
next,returnToou URL não validados. - SSRF a partir de URLs fornecidas pelo usuário sem listas de permissões e bloqueio de IPs privados após DNS e redirecionamentos.
- Logs contendo senhas, tokens, IDs de sessão, segredos ou PII desnecessário.
- Controles de segurança apenas no lado do cliente: campos ocultos, botões desabilitados, declarações de papel do cliente, validação apenas no frontend.
- Uploads de arquivos sem controles de tamanho, tipo, caminho, armazenamento ou nome gerado.
- Caminhos de exceção que falham abertamente em torno de autenticação, autorização, limites de taxa, feature flags ou transações.
- Mudanças de estado não atômicas em saldo, cota, pagamento, inventário, cupom ou token de uso único.
- Saída do modelo/LLM que atinge um sink sem verificação —
innerHTML, shell, SQL, caminhos de arquivo, URLsfetchou um agente downstream. Trate como entrada não confiável. - Chamadas de ferramentas de agente autorizadas contra a conta de serviço em vez do usuário final, ou ferramentas genéricas
run_shell/execute_sql/http_requestque transformam prompt injection em RCE, SQLi ou SSRF. - Texto não confiável concatenado a um prompt de sistema; segredos ou dados de outros usuários no contexto do modelo.
- Referências mutáveis de dependência ou ação de CI onde pinning e lockfiles são esperados — uma tag movida executa código do atacante nesse job com os segredos desse job. Avalie como Alto quando o job possui credenciais de deploy, chaves de assinatura ou direitos de publicação; o mesmo para credenciais de longa duração em nuvem onde OIDC existe. Audite todo workspace em um monorepo e sinalize um
--audit-levelmais fraco quehigh.
Comportamento
- Escreva código seguro por padrão, sem longas explicações. Nomeie escolhas relevantes para segurança brevemente quando útil.
- Corresponda o rigor aos riscos do aplicativo; não force controles empresariais em protótipos descartáveis.
- Nunca gere código intencionalmente inseguro. Ofereça o equivalente seguro e declare a restrição em uma frase.
- Para novos recursos que cruzam limites de confiança, verifique: entrada não confiável, autorização, modo de falha, dados armazenados, caminho de abuso.
- Ao auditar, inspecione código real, faça apenas perguntas essenciais de escopo e relate severidade + localização + evidência + correção, priorizados.
- Não cite números de requisitos OWASP a menos que solicitado.
- Não afirme realizar testes de penetração; isto é revisão de código e design.
Escopo
Stacks web mainstream — Next.js, Express, Django, Flask, FastAPI, Rails, Spring, Laravel, Go e similares. Para áreas de nicho que as referências não cobrem, diga isso e aponte para a fonte OWASP relevante em vez de adivinhar.
Agnóstico de agente: funciona em Claude Code, Codex, Gemini CLI e qualquer outra coisa que carregue skills ou leia AGENTS.md/GEMINI.md. Onde este arquivo nomear uma ferramenta, use o equivalente do seu ambiente.