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: nosniffe cookiesHttpOnly; 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
- Camada defensiva cobrindo os vetores do OWASP Top 10 mais comuns.
- Sanitização e escape explícito contra XSS refletido e persistente.
- Injeção consistente de cabeçalhos HTTP defensivos (CSP, HSTS, X-Frame-Options).