📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 12: Desenvolvimento Seguro. Recomendado revisar antes de começar.
v1.0 — Segurança Defensiva, SQL Injection, XSS, CSRF e Headers HTTP
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): OWASP Top 10 Defensivo · Anti-SQLi · Anti-XSS · Headers de Segurança
- v2: Criptografia AES-256-GCM, Hashing Argon2id & MFA TOTP
- v3: Pipeline DevSecOps com Análise SAST Semgrep & Trivy
- v4: Defesa Perimetral WAF, Rate Limiting & Rotação JWT
🎓 Nível Profissional Simulado: Engenheiro de Segurança / DevSecOps Júnior. Em segurança da informação, a responsabilidade não é só do time de infraestrutura. Um desenvolvedor seguro escreve código defensivo, valida todas as entradas de usuário, blinda o banco contra SQLi e configura cabeçalhos de proteção que barram ataques automatizados.
Construir um laboratório prático de Hardening e Segurança Defensiva mitigando as principais vulnerabilidades do OWASP Top 10, implementando consultas preparadas parametrizadas contra SQL Injection, sanitização rigorosa de inputs contra Cross-Site Scripting (XSS) e injeção de cabeçalhos de segurança HTTP modernos.
“Nosso relatório de Pentest apontou que nosso portal está vulnerável a SQL Injection na tela de login e que um hacker conseguiu injetar um script XSS que roubava cookies de sessão dos clientes. Precisamos de uma refatoração de segurança urgente: eliminar 100% das concatenações de strings em queries SQL, escapar qualquer saída HTML no frontend e configurar os cabeçalhos de proteção (CSP, HSTS, X-Frame-Options).”
| ID | Tipo | Descrição | Origem no Briefing |
|---|---|---|---|
| RF01 | Funcional | Eliminar SQL Injection através do uso estrito de Prepared Statements parametrizados. | “vulnerável a SQL Injection” |
| RF02 | Funcional | Sanitizar e escapar caracteres perigosos em textos de entrada de usuário para impedir XSS. | “script XSS roubava cookies” |
| RF03 | Funcional | Injetar cabeçalhos de segurança HTTP (CSP, HSTS, X-Frame-Options, X-Content-Type-Options). |
“cabeçalhos de proteção” |
| RNF01 | Não-Funcional | Conformidade estrita com o guia de recomendações do OWASP Top 10. | Compliance de Segurança |
| RNF02 | Não-Funcional | Zero impacto perceptível na latência de resposta das requisições. | Performance |
| ID | User Story | Prioridade |
|---|---|---|
| US01 | Como usuário, quero ter meus dados protegidos contra vazamentos por injeção SQL. | Alta |
| US02 | Como CISO, quero que o navegador bloqueie a execução de scripts não autorizados via CSP. | Alta |
# Branch da funcionalidade
git checkout -b feature/US01-owasp-hardening
# Executar a auditoria do modulo de seguranca
python src/security_core.py
src/security_core.py)class SecurityManager:
@staticmethod
def sanitizar_xss(texto_usuario: str) -> str:
return html.escape(texto_usuario, quote=True)
@staticmethod
def buscar_usuario_seguro(conexao, username: str):
cursor = conexao.cursor()
query = "SELECT id, username, email FROM usuarios WHERE username = ?"
cursor.execute(query, (username,))
return cursor.fetchone()
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd seguranca_01_hardening_owasp
docker-compose up -d
python audit_security.py
[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd catalogo_projetos/seguranca_01_hardening_owasp`
# Tentativa de SQL Injection classico: ' OR '1'='1
payload_sqli = "' OR '1'='1"
# Com Prepared Statements, a query busca literalmente pela string e retorna None (Nao vaza dados!)
A visualização arquitetural abaixo detalha a separação de responsabilidades e o fluxo de dados implementado na subpasta sec-python/:
flowchart TD
subgraph Entrada["Camada de Entrada & CLI"]
IN1["Interface de Comando / API"] --> IN2["Parser & Sanitização"]
end
subgraph Dominio["Camada de Domínio & Regras"]
DM1["Modelos de Domínio"] --> DM2["Processamento Algorítmico"]
end
subgraph Armazenamento["Persistência & Recursos"]
ST1["Banco de Dados / Arquivo"] --> ST2["Transações ACID & Logs"]
end
subgraph Qualidade["Validação & Qualidade"]
QA1["Testes Automatizados"] --> QA2["Checkpoints CP-01..05 PASS"]
end
Entrada --> Dominio
Dominio --> Armazenamento
Armazenamento --> Qualidade
style Entrada fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px
style Dominio fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px
style Armazenamento fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px
style Qualidade fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px
| ID | Persona | História de Usuário | Critério de Aceite | Prioridade |
|---|---|---|---|---|
| US-01 | Analista de Segurança | Desejo scanner local auditando vulnerabilidades OWASP Top 10 comuns | Detecção de injeção SQL, XSS refletido, senhas fracas e caminhos inseguros | Alta |
| US-02 | Desenvolvedor Seguro | Desejo biblioteca de sanitização e queries parametrizadas obrigatórias | Prevenção sistemática de SQL Injection e validação rigorosa de inputs | Alta |
| US-03 | Arquiteto de Segurança | Desejo mitigação de Cross-Site Scripting (XSS) com escape de HTML | Funções de sanitização contextual para atributos, scripts e texto HTML | Alta |
| US-04 | Auditor de TI | Desejo relatório de auditoria gerado em Markdown e JSON com severidades | Emissão de relatório técnico com níveis Crítico, Alto, Médio e Baixo | Média |
| US-05 | Especialista em Pentest | Desejo suíte de testes de penetração simulados com payloads de ataque | Testes automatizados comprovando a imunidade dos endpoints protegidos | Média |
| ID | Descrição do Requisito | Criticidade |
|---|---|---|
| RF-01 | Scanner estático e dinâmico de padrões de vulnerabilidades OWASP | Alta |
| RF-02 | Camada de sanitização de inputs com escape contextual contra XSS | Alta |
| RF-03 | Validador de queries SQL impedindo concatenações diretas de strings | Alta |
| RF-04 | Gerador de relatórios de auditoria com pontuação CVSS estimada | Média |
| RF-05 | Testes automatizados com payloads de teste de segurança | Média |
| ID | Especificação Arquitetural | Criticidade |
|---|---|---|
| RNF-01 | Zero falsos negativos em vetores de injeção SQL clássicos | Alta |
| RNF-02 | Baixo overhead computacional nas rotinas de validação de input | Alta |
| RNF-03 | Código de segurança em conformidade com diretrizes OWASP ASVS | Média |
| RNF-04 | Documentação explicativa didática de cada vulnerabilidade remediada | Média |
| RNF-05 | Isolamento dos fontes na pasta sec-python/ | Alta |
| User Story | Requisito Funcional | Requisito Não-Funcional | Módulo / Artefato de Código | Status de Homologação |
|---|---|---|---|---|
| US-01 | RF-01 |
RNF-01, RNF-03 |
sec-python/security_check.py |
Testado |
| US-02 | RF-02 |
RNF-01, RNF-02 |
sec-python/security_check.py |
Testado |
| US-03 | RF-03 |
RNF-01, RNF-02 |
sec-python/security_check.py |
Testado |
| US-04 | RF-04 |
RNF-03, RNF-04 |
sec-python/security_check.py |
Testado |
| US-05 | RF-05 |
RNF-01, RNF-05 |
sec-python/security_check.py |
Testado |
| Checkpoint | Escopo da Validação | Artefato Verificado | Status |
|---|---|---|---|
| CP-01 | Inicialização & Estrutura de Pastas | sec-python/ |
PASS ✅ |
| CP-02 | Modelagem de Domínio & Regras Centrais | Domain Models |
PASS ✅ |
| CP-03 | Persistência & Operações de I/O | Storage / Data |
PASS ✅ |
| CP-04 | Interface de Operação & Usabilidade | CLI / GUI / API |
PASS ✅ |
| CP-05 | Homologação com Suíte de Testes | Test Suite |
PASS ✅ |