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

🛡️ Defesa em Profundidade: WAF, Rate Limiting & Rotação JWT

v1.0 — Engenharia de Software & Práticas Profissionais

Trilha de Especialização Pedagógica


🎯 Objetivo & Escopo do Projeto

Arquitetura de proteção perimetral com Web Application Firewall (WAF), mitigação de ataques de força bruta com Token Bucket Rate Limiting e rotação periódica de chaves públicas/privadas JWT via JWKS (JSON Web Key Set).


🛠️ Código de Exemplo da Implementação

import time

class RateLimiter:
    def __init__(self, limite_por_minuto=60):
        self.limite = limite_por_minuto
        self.requisicoes = {}

    def permitir(self, ip_origem: str) -> bool:
        agora = time.time()
        historico = self.requisicoes.get(ip_origem, [])
        # Filtra apenas o ultimo minuto
        historico = [t for t in historico if agora - t < 60]
        if len(historico) >= self.limite:
            return False
        historico.append(agora)
        self.requisicoes[ip_origem] = historico
        return True

if __name__ == "__main__":
    limiter = RateLimiter(limite_por_minuto=5)
    ip = "192.168.1.50"
    for i in range(7):
        permitido = limiter.permitir(ip)
        print(f"Requisicao {i+1} de {ip}: {'PERMITIDA' if permitido else 'BLOQUEADA (429 Too Many Requests)'}")


🚀 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_04_waf_rate_limiting_jwt

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_04_waf_rate_limiting_jwt


🏛️ 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 Engenheiro de Borda Desejo Web Application Firewall (WAF) inspecionando requisições Filtragem de padrões maliciosos em headers, query params e bodies Alta
US-02 Arquiteto de APIs Desejo rate limiting por IP/token usando algoritmo Token Bucket Prevenção de ataques de negação de serviço (DoS) e força bruta Alta
US-03 Desenvolvedor de Segurança Desejo emissão e validação de tokens JWT com expiração e rotação Suporte a Access Token curto e Refresh Token com revogação em blacklist Alta
US-04 Operador de SOC Desejo telemetria e alertas em tempo real de requisições bloqueadas Logs estruturados em JSON contendo IP, motivo do bloqueio e timestamp Média
US-05 Auditor de Gateways Desejo testes de estresse validando comportamento sob rajadas de tráfego Testes unitários assegurando retorno HTTP 429 Too Many Requests quando excedido Média

⚙️ Requisitos Funcionais (RF)

ID Descrição do Requisito Criticidade
RF-01 Motor de regras WAF com detecção de padrões anômalos e assinaturas Alta
RF-02 Algoritmo de Rate Limiting Token Bucket com recarga contínua Alta
RF-03 Mecanismo completo de autenticação JWT com assinatura e rotação segura Alta
RF-04 Lista negra (blacklist) em memória para revogação imediata de tokens Média
RF-05 Suíte de testes de rajada e tentativa de evasão de filtros Média

🛡️ Requisitos Não-Funcionais (RNF)

ID Especificação Arquitetural Criticidade
RNF-01 Latência de inspeção de requisição inferior a 5ms por chamada Alta
RNF-02 Assinatura criptográfica segura prevenindo adulteração de claims Alta
RNF-03 Thread-safety garantido nas operações do bucket de tokens Média
RNF-04 Padrão de código limpo com separação em middlewares encadeáveis Média
RNF-05 Organização dos fontes na subpasta 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-02 sec-python/security_gateway.py Testado
US-02 RF-02 RNF-01, RNF-03 sec-python/security_gateway.py Testado
US-03 RF-03 RNF-02, RNF-04 sec-python/security_gateway.py Testado
US-04 RF-04 RNF-02, RNF-04 sec-python/security_gateway.py Testado
US-05 RF-05 RNF-01, RNF-05 sec-python/security_gateway.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 ✅