Intermediário Web — OWASP Top 10

Exposição de Dados Sensíveis

Exposição de dados sensíveis ocorre quando informações como senhas, cartões de crédito, dados de saúde ou PII são armazenados ou transmitidos sem proteção criptográfica adequada. O atacante não precisa “hackear” — basta ler o que está exposto.

Dados em Trânsito — HTTP sem TLS

// Interceptação com Wireshark em rede local (apenas para fins educacionais)
// Requisição capturada em texto claro:
POST http://app.example.com/login HTTP/1.1
Content-Type: application/x-www-form-urlencoded

username=joao&password=minhasenha123

Solução: TLS obrigatório. Redirecionar HTTP para HTTPS.

server {
    listen 80;
    return 301 https://$host$request_uri;
}
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

TLS — Configurações fracas

Protocolos obsoletos — desabilite:
- SSLv2, SSLv3 (POODLE)
- TLS 1.0, TLS 1.1 (BEAST, POODLE-TLS)

Ciphers fracos — evite:
- RC4, DES, 3DES, EXPORT ciphers
- NULL ciphers

Configuração segura (nginx):
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;

Dados em Repouso — Banco de Dados sem Criptografia

-- VULNERÁVEL: dados sensíveis em texto claro
CREATE TABLE patients (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    cpf VARCHAR(14),       -- sem criptografia
    diagnosis TEXT         -- sem criptografia
);
-- Melhor prática: criptografia de coluna (PostgreSQL pgcrypto)
INSERT INTO patients (cpf, diagnosis)
VALUES (
    pgp_sym_encrypt('123.456.789-00', 'encryption_key'),
    pgp_sym_encrypt('Hipertensão', 'encryption_key')
);

Full Disk Encryption (FDE) protege contra roubo físico, mas não contra acesso via aplicação comprometida.

Segredos em código-fonte

# Procure por segredos acidentalmente commitados
git log --all --full-history -- '*.env'
git grep -i "password\|secret\|api_key\|token" HEAD

Ferramentas: truffleHog, gitleaks, detect-secrets — executar em pré-commit e CI/CD.

Logging de dados sensíveis

# ERRADO — senha aparece nos logs
logger.info(f"Login attempt: user={username}, password={password}")

# CORRETO — nunca logue dados sensíveis
logger.info(f"Login attempt: user={username}")

Checklist de proteção

  • Identifique quais dados são sensíveis (PII, financeiro, saúde).
  • Criptografe em trânsito: TLS 1.2+ com ciphers modernos.
  • Criptografe em repouso: AES-256 para arquivos e bancos de dados.
  • Não armazene o que não precisa — coleta mínima de dados.
  • Mascare dados em logs, telas de depuração e erros.
  • Garanta que backups também estejam criptografados.
  • Revogue e rotacione segredos regularmente.