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.
O que cada post contém
Todo post da série segue a mesma estrutura, então você sempre sabe onde procurar:
- O Ataque — o que é e como é explorado, em prosa direta.
- 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.
- As Proteções Padrão do Django — o que o framework já faz por você e exatamente onde isso termina.
- Padrão Vulnerável — o código inseguro, escrito do jeito que ele realmente é escrito.
- Implementação Segura — a correção em Django, do controle mais amplo ao mais específico.
- A Visão do Analista — a ponte com o CySA+: controles preventivos vs. compensatórios, raio de impacto, defesa em profundidade.
- 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.
Ataques de Injeção
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 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 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 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 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 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 →
Controle de Acesso Quebrado
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.
-
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 →
-
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 →
-
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 →
-
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.
Autenticação e Sessão
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.
Falhas Criptográficas
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.
Configuração Insegura
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.
Integridade de Dados e Desserialização
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.
Concorrência e Abuso de Recursos
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.
Logging e Monitoramento 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.
SSRF e Falsificação de Requisições
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.
Segurança de APIs
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.
Componentes Vulneráveis e Desatualizados
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.
Nenhum post corresponde aos filtros atuais.
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.