Secure Coding Practices para SDLC com IA assistida
IA já faz parte do desenvolvimento. O objetivo desta página é transformar velocidade em engenharia controlada: requisitos verificáveis, código seguro, supply chain, CI/CD, Docker, IaC, agentes, permissões e evidência de revisão.
IA acelera código; segurança precisa acelerar validação
IA no desenvolvimento virou padrão
Stack Overflow 2025, JetBrains 2025, GitLab 2026
A aula assume IA como parte normal do SDLC: controles de segurança precisam acompanhar a nova velocidade.
O novo gargalo é controle
Quando código fica barato de gerar, a vantagem muda para quem valida melhor: threat model pequeno, testes negativos, SCA, secret scan, review humano, sandbox de agente e rastreabilidade.
Vibe coding sem gates
Gerar uma feature inteira com IA e só testar se "funcionou" ignora autorização, dependências, segredo, logs e infraestrutura. A correção é transformar cada sugestão em evidência.
O que aparece em revisão
Secure SDLC com IA assistida
Preparar
Política de uso de IA, padrões de código seguro, threat model leve, classificação de dados e limites para agentes.
Proteger
Validação, authz, sessão, secrets, crypto, logs, API, upload e dependências com exemplos por stack.
Produzir
CI/CD com SAST, SCA, secret scan, container scan, IaC scan, SBOM, proveniência e approval para risco alto.
Responder
Observabilidade segura, rotação, exceções com dono, runbook e aprendizado que volta para requisitos e prompts.
Controles fundamentais por superfície
OWASP Secure Coding Practices, NIST SSDF
Código seguro é um conjunto de controles distribuídos, não uma ferramenta única.
Hub de práticas fundamentais
Requisitos e threat modeling
Segurança começa antes do código: abuso, dados, confiança e critérios testáveis.
Validação de entrada e output encoding
Entrada é contrato; saída é contexto. Validar não substitui encoding.
Autenticação, sessão e autorização
Login prova identidade; autorização decide recurso, tenant e ação.
Secrets, configuração e logs
Segredo não entra em código, prompt, log, screenshot ou contexto de agente.
Criptografia e proteção de dados
Criptografia é ciclo de vida: algoritmo, chave, rotação, escopo e retenção.
Erros, logs e observabilidade segura
Log deve ajudar operação sem virar vazamento, oracle ou trilha de exploração.
APIs, uploads e parsing de arquivos
Parser é superfície de ataque: tamanho, tipo, path, timeout e conteúdo importam.
Dependências e supply chain
Instalar a biblioteca correta é controle de segurança.
CI/CD seguro
Pipeline é código privilegiado: permissões, secrets e eventos decidem blast radius.
Docker e runtime seguro
Imagem é runtime empacotado: base, usuário, scripts e CVEs entram no produto.
IaC e cloud guardrails
Infra como código também é código: policy, revisão e scanner no PR.
IA, vibe coding e agentes no SDLC
Agente de código tem poder real: arquivos, rede, comandos, dependências e conectores.
Prompt injection e output inseguro
LLM mistura instrução e dados; downstream precisa validar a saída.
Governança, rastreabilidade e responsabilidade
Velocidade só ajuda quando origem, decisão e risco residual são rastreáveis.
Cofre de código por stack
SQL injection e XSS no mesmo fluxo
Schema validation, prepared statement, auto-escape e teste negativo.
const q = req.query.q || "";
const rows = await db.query("select * from users where name like '%" + q + "%'");
res.send("<li>" + rows[0].name + "</li>");const schema = z.object({ q: z.string().max(80).optional() });
const { q = "" } = schema.parse(req.query);
const rows = await db.query("select * from users where name like ?", [`%${q}%`]);
res.render("users", { users: rows }); // template auto-escapesPath traversal em download
Normalização de path, allowlist, tamanho e teste com ../.
@app.get("/download")
def download():
name = request.args["file"]
return send_file("/srv/reports/" + name)BASE = Path("/srv/reports").resolve()
@app.get("/download")
def download():
name = ReportQuery.model_validate(request.args).file
target = (BASE / name).resolve()
if BASE not in target.parents:
abort(404)
return send_file(target)Log4Shell como lembrete de transitivas
Dependency tree, OWASP Dependency-Check e política de atualização.
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency><dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.23.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>Autorização por recurso
Teste com dois usuários e policy-based authorization.
[Authorize]
public async Task<IActionResult> GetInvoice(Guid id) {
return Ok(await db.Invoices.FindAsync(id));
}[Authorize]
public async Task<IActionResult> GetInvoice(Guid id) {
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
var invoice = await db.Invoices.SingleOrDefaultAsync(i => i.Id == id && i.OwnerId == userId);
return invoice is null ? NotFound() : Ok(invoice);
}Secrets em PR não confiável
Sem secrets em fork, permissões mínimas e ambiente protegido.
on: pull_request_target
permissions: write-all
steps:
- run: npm install && npm test
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}on: pull_request
permissions:
contents: read
steps:
- run: npm ci --ignore-scripts
- run: npm test
# publish só em branch protegida + ambiente aprovadoImagem root e superfície desnecessária
Pinning, não-root, npm ci, scan de imagem e build reprodutível.
FROM node:latest
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]FROM node:22-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev --ignore-scripts
FROM node:22-alpine
WORKDIR /app
USER node
COPY --from=deps /app/node_modules ./node_modules
COPY --chown=node:node . .
CMD ["node", "server.js"]IAM wildcard e rede aberta
Checkov/tfsec, least privilege e exceção com dono/validade.
actions = ["s3:*"]
resources = ["*"]
cidr_blocks = ["0.0.0.0/0"]actions = ["s3:GetObject"]
resources = ["${aws_s3_bucket.data.arn}/reports/*"]
cidr_blocks = [var.office_cidr]
# exceção exige owner, motivo e validadeSupply Chain Lab
Package hallucination e slopsquatting
arXiv 2406.10279
Dependência sugerida por IA deve ser tratada como input não confiável até verificação externa.
IA, vibe coding e agentes com limites
Onde IA acelera
- Explicar código legado.
- Gerar testes negativos.
- Propor refatoração pequena.
- Comparar bibliotecas.
- Revisar checklist de PR.
Onde IA quebra
- Alucina pacote.
- Remove validação.
- Segue prompt injection indireto.
- Lê segredo se tiver escopo.
- Gera diff grande demais.
Como operar
- Sandbox por workspace.
- Rede com approval.
- Secrets fora do contexto.
- MCPs mínimos.
- Evidência antes de conclusão.
Contexto mínimo
- Objetivo pequeno
- Dados sintéticos
- Critérios testáveis
Permissão mínima
- Workspace restrito
- Rede com approval
- Secrets fora
Conclusão auditável
- Arquivos tocados
- Comandos rodados
- Risco residual
Humano no loop
- Diff pequeno
- Checklist de risco
- Aprovação sensível
O fluxo seguro para desenvolvimento assistido por IA
A IA entra como acelerador, mas cada resposta deve atravessar um fluxo explícito: intenção pequena, contexto mínimo, testes negativos, validação de dependência, sandbox e evidência no PR. O aluno precisa sair da aula sabendo defender cada gate tecnicamente.
Da sugestão da IA até o merge: o que precisa existir
O ponto didático aqui é transformar "a IA gerou código" em uma cadeia de evidência. A resposta só vira mudança quando passa por contexto mínimo, teste de abuso, verificação de dependência, política de permissões e resumo auditável. Use os demos abaixo para mostrar no terminal como cada etapa reprova ou libera uma parte do fluxo.
Monte o perfil de execução do agente
Ative permissões e observe o risco residual. Um agente produtivo não precisa de acesso total para entregar código revisável.
Transforme output da IA em evidência
O dado de 45% deixa de ser um gráfico solto: nesta aula ele vira uma regra operacional. Código gerado por IA só passa quando SAST, abuso, dependências, secrets e prompt injection deixam evidência no terminal.
PR Review Simulator
- Primeiro procure autorização, segredo e dependência suspeita. São achados que bloqueiam merge.
- Depois conecte cada linha a um gate: teste de abuso, SCA, secret scan, IaC, container ou prompt canary.
- No fim aceite apenas resumo com evidência: comando, resultado, risco residual e dono da correção.
Pipeline Gate Simulator
Gates deslocam risco para a esquerda
NIST SSDF, SLSA, OWASP SCP
Quanto mais cedo o gate roda, menor o custo de correção e maior a evidência para review.
Terminal de prática
Quiz de missões
Progresso
Responda às missões para liberar o diagnóstico.
AI accountability: geração corre na frente do controle
GitLab AI Accountability Report 2026
A produtividade individual sobe; review, validação, governança e rastreabilidade viram o gargalo.
Referências e materiais usados
OKAMI Design System
Contrato visual usado nesta página: tokens, componentes, terminal, cards, tabs, toasts e padrões.
NIST SP 800-218 SSDF v1.1
Base para inserir práticas de desenvolvimento seguro em qualquer SDLC.
OWASP Secure Coding Practices Quick Reference Guide
Checklist agnóstico de tecnologia para validação, encoding, auth, sessão, crypto, logs e configuração.
OWASP Secure Coding Checklist
Lista operacional para transformar revisão em perguntas verificáveis.
OWASP Cheat Sheet Series
Guias práticos por classe de controle: validation, auth, logging, upload, Docker, secrets e mais.
OWASP ASVS
Ajuda a escrever requisitos de segurança que podem ser testados.
OWASP API Security Top 10
Base para BOLA/IDOR, inventory, authorization e API abuse cases.
CISA Secure by Design
Reposiciona segurança como responsabilidade do fabricante e do processo de engenharia.
OWASP Top 10 for LLM Applications
Referência para prompt injection, excessive agency, data leakage, supply chain e output handling em LLMs.
NIST AI Risk Management Framework
Estrutura de governança para mapear, medir e gerenciar risco em sistemas com IA.
MITRE ATLAS
Táticas e técnicas adversariais contra sistemas de IA.
Stack Overflow Developer Survey 2025
Mostra mainstream adoption: 84% usam ou planejam usar IA; profissionais usam IA diariamente em grande escala.
JetBrains Developer Ecosystem 2025
Aponta IA como habilidade central e uso regular em coding/development.
GitLab AI Accountability Report 2026
Mostra o paradoxo: geração acelera, mas revisão, validação, governança e rastreabilidade viram gargalo.
Veracode GenAI Code Security Report 2025
Pesquisa sobre segurança de código gerado por mais de 100 LLMs em Java, JavaScript, Python e C#.
Sonar State of Code Developer Survey 2026
Dados sobre uso diário, vibe coding e validação de código assistido por IA.
DORA Impact of Generative AI
Mostra que IA precisa de feedback loops fortes para não degradar estabilidade.
We Have a Package for You!
Pesquisa sobre package hallucination e slopsquatting em código gerado por LLMs.
OpenAI Codex Agent Approvals & Security
Referência de sandbox, approvals e limites operacionais para agente de código.
GitHub Copilot Cloud Agent Risks and Mitigations
Riscos de vazamento, prompt injection e necessidade de rastreabilidade em agentes.
Claude Code Security
Permissões, aprovações e comandos que exigem cuidado em agentes locais.
SLSA
Modelo para integridade de build, proveniência e cadeia de suprimentos.
Sigstore
Assinatura e verificação de artefatos, imagens e releases.
GitHub Dependency Review
Revisão de mudanças em dependências antes do merge.
npm audit
Auditoria de vulnerabilidades no ecossistema npm.
pip-audit
Auditoria de dependências Python contra vulnerabilidades conhecidas.
NuGet auditing
Auditoria de pacotes NuGet no restore/build.
OWASP Dependency-Check
SCA para Java/Maven/Gradle e outros ecossistemas.
Docker Build Best Practices
Práticas de imagem mínima, pinning, camadas e builds reprodutíveis.
Docker Scout
Análise de CVEs e políticas para imagens de container.
OWASP Docker Security Cheat Sheet
Controles de usuário não-root, superfície e runtime de containers.
Kubernetes Pod Security Standards
Perfis baseline/restricted para pods em Kubernetes.
Checkov
Scanner de IaC para Terraform, Kubernetes, CloudFormation e pipelines.
Gitleaks
Detecção de segredos em código, histórico e pipelines.
Semgrep
SAST e regras customizadas para padrões de código inseguro.