Série do blog

Secure by Design

Segurança de Aplicações Web com Python & Django

Um ataque por post: como funciona, como é explorado e o código Django exato que o impede. Cada defesa é sustentada por um laboratório público e executável que você pode clonar e escanear com as mesmas ferramentas que um time de segurança usa — e cada ataque é mapeado ao CompTIA CySA+ CS0-003 e ao OWASP Top 10.

9 de 35 publicados
26%

Um post toda quinta-feira Inglês + Português Laboratórios executáveis

O que cada post contém

Todo post da série segue a mesma estrutura, então você sempre sabe onde procurar:

  1. O Ataque — o que é e como é explorado, em prosa direta.
  2. Incidentes do Mundo Real — uma violação ou CVE com nome e sobrenome, sua técnica MITRE ATT&CK e a consequência sob a LGPD/GDPR lida por quem é advogado de formação.
  3. As Proteções Padrão do Django — o que o framework já faz por você e exatamente onde isso termina.
  4. Padrão Vulnerável — o código inseguro, escrito do jeito que ele realmente é escrito.
  5. Implementação Segura — a correção em Django, do controle mais amplo ao mais específico.
  6. A Visão do Analista — a ponte com o CySA+: controles preventivos vs. compensatórios, raio de impacto, defesa em profundidade.
  7. Detectando Automaticamente — o teste que prova a sua defesa, mais a saída real capturada de Bandit, Semgrep, sqlmap ou pip-audit rodados contra o laboratório companheiro.

A série é escrita como aprendizado em público — um advogado que virou desenvolvedor estudando segurança de aplicações com o currículo do CySA+ em mãos. A autoridade vem de código verificado e varreduras reproduzíveis, não de anos alegados em um SOC.

Clone os laboratórios no GitHub

Exibindo 9/9
I

Ataques de Injeção

OWASP A03 CySA+ · Gestão de Vulnerabilidades 5/5 publicados

Cinco posts, uma única causa raiz: confundir dado com código. O mesmo erro é levado a um interpretador diferente a cada vez — o banco SQL, o DOM do navegador, o motor de templates, o shell do sistema e o parser de XML. O Django parametriza ou escapa a maior parte disso por padrão; cada post estuda a válvula de escape que o desenvolvedor usa quando o padrão seguro atrapalha.

  1. 1 A03

    SQL Injection

    SQL Injection: como atacantes exploram queries inseguras, por que o ORM do Django os impede por padrão e onde a proteção termina. OWASP A03:2021, CySA+ VM.

    4 de Maio de 2026 Leia mais →

  2. 2 A03

    Cross-Site Scripting (XSS)

    XSS no Django: como ataques armazenados, refletidos e DOM funcionam, por que mark_safe() e Markdown inseguro abrem a mesma brecha, e como migrar para nh3.

    7 de Maio de 2026 Leia mais →

  3. 3 A03

    Injeção em Templates Server-Side (SSTI)

    SSTI no Django: como a travessia de MRO no Jinja2 atinge RCE, por que a DTL é segura por design e onde a garantia se desfaz. OWASP A03:2021, CVE-2022-22954.

    11 de Maio de 2026 Leia mais →

  4. 4 A03

    Injeção de Comandos OS

    Injeção de Comandos OS no Django: como shell=True vira RCE e por que shell=False com lista de argumentos impede. OWASP A03:2021, CVE-2016-3714.

    14 de Maio de 2026 Leia mais →

  5. 5 A05

    XXE e Bombas XML

    XXE no Django: entidades externas leem arquivos e alcançam o endpoint de metadados, o Billion Laughs exaure a memória e defusedxml corrige. OWASP A03:2021.

    21 de Maio de 2026 Leia mais →

II

Controle de Acesso Quebrado

OWASP A01 CySA+ · Operações de Segurança 4/5 publicados

Cinco posts sobre uma única falha: a aplicação autentica quem você é, mas nunca impõe o que você pode tocar. O Django entrega primitivas de autenticação (login_required, is_authenticated) e deixa a autorização em nível de objeto e de campo por sua conta — cada post é um lugar onde essa lacuna se abre.

  1. 6 A01

    Controle de Acesso Quebrado e IDOR

    IDOR no Django: como trocar um ID na URL vaza dados de outro usuário, por que login_required não é autorização e como escopar querysets. OWASP A01:2021.

    28 de Maio de 2026 Leia mais →

  2. 7 A01

    Escalação de Privilégios

    Escalação de privilégios no Django: como fields='__all__' expõe is_staff e is_superuser, e como listas explícitas de campos impedem. OWASP A01:2021.

    4 de Junho de 2026 Leia mais →

  3. 8 A01

    Cross-Site Request Forgery (CSRF)

    CSRF no Django: como formulários ocultos usam o cookie de sessão da vítima, por que @csrf_exempt é perigoso e como o CsrfViewMiddleware impede. OWASP A01:2021.

    11 de Junho de 2026 Leia mais →

  4. 9 A01

    Path Traversal

    Path traversal no Django: como os.path.join permite escapar do MEDIA_ROOT, por que safe_join impede e quando FileField elimina o risco. OWASP A01:2021.

    18 de Junho de 2026 Leia mais →

Mais 1 post nesta série, publicado semanalmente.

III

Autenticação e Sessão

OWASP A07 CySA+ · Operações de Segurança

Sete posts sobre a porta de entrada: provar quem é o usuário e manter essa prova a salvo. O framework de auth do Django traz primitivas fortes — hashing de senha, rotação da chave de sessão no login, tokens de redefinição com HMAC —, mas deixa rate limiting, MFA e a integração de tokens / OAuth para o desenvolvedor e o ecossistema.

7 posts planejados para esta série.

IV

Falhas Criptográficas

OWASP A02 CySA+ · Gestão de Vulnerabilidades

Quatro posts sobre proteger dados em repouso, em trânsito e o segredo que sustenta os dois. O Django traz padrões fortes (hashing PBKDF2, uma superfície completa de configurações SECURE_*), então cada post estuda o momento em que o desenvolvedor sobrescreve um padrão, esquece uma flag ou comita um segredo.

4 posts planejados para esta série.

V

Configuração Insegura

OWASP A05 CySA+ · Gestão de Vulnerabilidades

Cinco posts sobre acertar os padrões e o deploy. O Django já traz padrões seguros para boa parte disso — X-Frame-Options: DENY, uma superfície SECURE_* completa —, então as falhas são as flags que o desenvolvedor desliga, o cabeçalho que nunca adiciona e a ferramenta de terceiros que configura errado.

5 posts planejados para esta série.

VI

Integridade de Dados e Desserialização

OWASP A08 CySA+ · Resposta a Incidentes

Um post sobre confiar em um payload que a aplicação deveria tratar como hostil. O Django traz as primitivas certas — serializer de sessão em JSON por padrão e django.core.signing para integridade —, então a vulnerabilidade é o desenvolvedor que recorre ao pickle ou inventa o próprio token.

1 post planejado para esta série.

VII

Concorrência e Abuso de Recursos

OWASP A04 CySA+ · Operações de Segurança

Dois posts sobre a aplicação lidando mal com os próprios recursos sob carga hostil. Os dois permanecem no escopo justamente porque o Django traz primitivas concretas — select_for_update(), F(), DATA_UPLOAD_MAX_*, throttling — que tornam real o par vulnerável-para-seguro.

2 posts planejados para esta série.

VIII

Logging e Monitoramento de Segurança

OWASP A09 CySA+ · Operações de Segurança

Um post sobre a camada de observabilidade, restrito ao que é do desenvolvedor: log injection (entrada não confiável forjando linhas de log) e dados sensíveis vazando para os logs. Estratégia de monitoramento é do SOC e fica como nota lateral.

1 post planejado para esta série.

IX

SSRF e Falsificação de Requisições

OWASP A10 CySA+ · Operações de Segurança

Três posts sobre fazer o servidor agir contra si mesmo ou contra seus usuários. O Django entrega ALLOWED_HOSTS, url_has_allowed_host_and_scheme() e URLValidator — então toda falha aqui é confiar em uma URL enviada pelo usuário ou no Host da requisição sem validar.

3 posts planejados para esta série.

X

Segurança de APIs

OWASP A01 / A03 / A05 CySA+ · Operações de Segurança

Um post de síntese. O OWASP API Security Top 10 não é um conjunto novo de ataques — é a série anterior reexpressa para APIs, onde os padrões de conveniência do Django REST Framework amplificam cada erro de controle de acesso.

1 post planejado para esta série.

XI

Componentes Vulneráveis e Desatualizados

OWASP A06 CySA+ · Gestão de Vulnerabilidades

Um post de encerramento, ancorado em um exploit concreto e alcançável pelo Django — uma CVE do Pillow via upload em ImageField, confusão de algoritmo no PyJWT — com análise de composição de software (pip-audit, Dependabot, SBOM) como a forma de detectá-los primeiro.

1 post planejado para esta série.

Acompanhe a série

Post novo toda quinta-feira, em inglês e português no mesmo dia. Assine pelo feed ou clone os laboratórios e faça as varreduras você mesmo.