📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 12: Desenvolvimento Seguro. Recomendado revisar antes de começar.

🛡️ Laboratório de Auditoria & Hardening OWASP Top 10

v1.0 — Segurança Defensiva, SQL Injection, XSS, CSRF e Headers HTTP

Trilha de Especialização Pedagógica — Projeto 1 de 4

🎓 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.


🎯 Objetivo & Escopo do Projeto

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.


🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Chief Information Security Officer — CISO)

“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).”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

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

📋 Fase 2 — Backlog & User Stories

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

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Setup)

# Branch da funcionalidade
git checkout -b feature/US01-owasp-hardening

# Executar a auditoria do modulo de seguranca
python src/security_core.py

🛠️ Fase 4 — Implementação Guiada (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()


🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd seguranca_01_hardening_owasp

2. Execute a aplicação ou testes

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`

🧭 Decisões de Arquitetura (ADRs)


🧪 Testes de Validação & Asserções de Pentest

# 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!)


🏛️ Arquitetura Visual & Engenharia do Sistema

A visualização arquitetural abaixo detalha a separação de responsabilidades e o fluxo de dados implementado na subpasta sec-python/:

Arquitetura da Aplicação

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

🎯 Engenharia de Requisitos & Modelagem Formal

👤 User Stories (Histórias de Usuário)

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

⚙️ Requisitos Funcionais (RF)

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

🛡️ Requisitos Não-Funcionais (RNF)

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

🔗 Matriz de Rastreabilidade (RTM)

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

🏁 Checkpoints de Qualidade & Homologação

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 ✅