Pular para conteúdo

Projeto 12: Defesa Ativa e Mitigação contra OWASP Top 10 🕸️

Escopo do Projeto

Objetivo: Conceber uma camada de middleware de proteção para APIs Web mitigando as principais falhas do OWASP Top 10, com foco em Injeção (SQLi), Cross-Site Scripting (XSS) e Quebra de Controle de Acesso (BOLA).


🎯 1. Contexto & Desafio Prático

A vulnerabilidade em código web é o vetor de ataque mais explorado por agentes maliciosos para roubo de dados corporativos. Neste projeto, você desenvolverá filtros defensivos e middlewares de sanitização que interceptam requisições HTTP maliciosas, aplicam cabeçalhos de segurança rígidos e blindam endpoints de API contra invasões comuns.


📋 2. Requisitos Técnicos Obrigatórios

  • R1 (Prevenção de Injeções via Queries Parametrizadas): Implementar validação estrita de tipos e garantir o uso obrigatório de Prepared Statements no acesso ao banco de dados.
  • R2 (Mitigação de XSS e Cabeçalhos de Segurança): Injetar automaticamente cabeçalhos defensivos: Content-Security-Policy (CSP), X-Content-Type-Options: nosniff e cookies HttpOnly; Secure; SameSite=Strict.
  • R3 (Validação de Propriedade contra BOLA/IDOR): Construir checagem de autorização em nível de objeto onde o identificador do usuário autenticado no token deve bater com o proprietário do registro.
  • R4 (Rate Limiting e Defesa contra Força Bruta): Implementar limitador de requisições baseado em endereço IP e identificador de usuário para frustrar ataques de enumeração.

📐 3. Diagrama Conceitual & Arquitetura

graph TD
    Req["Requisição HTTP Entrante"] --> WAF["Security Interceptor Middleware"]
    WAF --> Check1{"Headers & Rate Limit OK?"}
    Check1 -- Não --> Drop429["HTTP 429 Too Many Requests"]
    Check1 -- Sim --> Check2{"Parâmetros Sanitizados (Anti-SQLi / XSS)?"}
    Check2 -- Não --> Drop400["HTTP 400 Bad Request & Log de Ataque"]
    Check2 -- Sim --> Check3{"Autorização no Objeto (Anti-BOLA)?"}
    Check3 -- Não --> Drop403["HTTP 403 Forbidden"]
    Check3 -- Sim --> Controller["Execução do Endpoint com Cabeçalhos de Proteção"]
    style Req fill:#e1f5fe,stroke:#01579b
    style WAF fill:#fff3e0,stroke:#e65100
    style Controller fill:#e8f5e9,stroke:#2e7d32
    style Drop429 fill:#ffebee,stroke:#c62828
    style Drop400 fill:#ffebee,stroke:#c62828
    style Drop403 fill:#ffebee,stroke:#c62828

💻 4. Especificação Técnica & Código de Referência

// security_defense_middleware.py
import re
import html
from typing import Dict, Any

class SecurityDefenseMiddleware:
    def __init__(self):
        # Padrões suspeitos de SQL Injection clássica
        self.sqli_pattern = re.compile(r"(--|union|select|drop|insert|delete|where.*=)", re.IGNORECASE)

    def sanitize_input(self, value: str) -> str:
        """Sanitiza entradas contra Cross-Site Scripting (XSS)."""
        if not isinstance(value, str):
            return value
        # Escapa caracteres especiais HTML (&, <, >, ", ')
        return html.escape(value.strip())

    def validate_no_sqli(self, value: str) -> bool:
        """Detecta tentativas óbvias de injeção em parâmetros raw."""
        if isinstance(value, str) and self.sqli_pattern.search(value):
            return False
        return True

    def apply_security_headers(self, headers: Dict[str, str]) -> Dict[str, str]:
        """Injeta cabeçalhos recomendados pelo OWASP Secure Headers Project."""
        headers["Content-Security-Policy"] = "default-src 'self'; script-src 'self'; object-src 'none';"
        headers["X-Content-Type-Options"] = "nosniff"
        headers["X-Frame-Options"] = "DENY"
        headers["Strict-Transport-Security"] = "max-age=31536000; includeSubDomains"
        headers["Referrer-Policy"] = "no-referrer-when-downgrade"
        return headers

if __name__ == '__main__':
    defense = SecurityDefenseMiddleware()
    malicious = "<script>alert('pwned')</script>"
    clean = defense.sanitize_input(malicious)
    print(f"Entrada higienizada: {clean}")
    assert "<script>" not in clean
    print("Middleware de defesa ativa OWASP validado.")

📦 5. Critérios de Avaliação e Entrega

  1. Camada defensiva cobrindo os vetores do OWASP Top 10 mais comuns.
  2. Sanitização e escape explícito contra XSS refletido e persistente.
  3. Injeção consistente de cabeçalhos HTTP defensivos (CSP, HSTS, X-Frame-Options).