Toda requisição de CPF deve trafegar obrigatoriamente sobre HTTPS com TLS 1.2 ou superior. A chave de API deve ser enviada no header x-api-key, nunca na URL. O CPF não pode aparecer em texto puro nos logs da aplicação — use máscara nos três primeiros e dois últimos dígitos. Essas três medidas cobrem a maior parte dos vetores de vazamento em trânsito.
Introdução
O CPF é um dado pessoal protegido pela LGPD, e sua transmissão pela internet exige cuidados rigorosos de segurança. Uma requisição mal configurada pode expor números de CPF em texto plano, criando vulnerabilidades que podem resultar em vazamentos de dados e penalidades legais. O guia de segurança em APIs da OWASP lista a transmissão insegura de dados sensíveis entre as dez falhas mais críticas em APIs REST — e os cuidados descritos aqui endereçam diretamente esse risco.
Camadas de proteção na transmissão de dados
A segurança na transmissão de dados sensíveis não depende de uma única tecnologia, mas de múltiplas camadas complementares:
| Camada | Tecnologia | Proteção oferecida |
|---|---|---|
| Transporte | TLS 1.2 / 1.3 | Criptografia ponto a ponto |
| Protocolo | HTTPS | Garante uso de TLS na web |
| Autenticação | API Key / OAuth | Controla quem acessa a API |
| Aplicação | Criptografia AES/RSA | Proteção adicional do payload |
| Rede | VPN / Private Link | Isolamento do tráfego |
| Armazenamento | Encryption at rest | Proteção dos dados salvos |
Verificando a segurança da conexão com cURL
Antes de integrar qualquer API, valide que a conexão utiliza TLS adequado:
# Verificar versão do TLS e certificado
curl -v --tlsv1.2 \
-H "x-api-key: SUA_CHAVE_AQUI" \
"https://api.cpfhub.io/cpf/12345678909" 2>&1 | \
grep -E "SSL|TLS|subject|issuer|expire"
# Testar se a API rejeita conexões inseguras (HTTP)
curl -v "http://api.cpfhub.io/cpf/12345678909" 2>&1 | \
grep -E "redirect|301|302|Location"
# Verificar cipher suites aceitas
curl -s --tlsv1.3 \
-H "x-api-key: SUA_CHAVE_AQUI" \
"https://api.cpfhub.io/cpf/12345678909" | python3 -m json.tool
# Forçar TLS 1.3 (mais seguro)
curl -s --tls13-ciphers TLS_AES_256_GCM_SHA384 \
-H "x-api-key: SUA_CHAVE_AQUI" \
"https://api.cpfhub.io/cpf/12345678909"
Implementando requisições seguras com Python
Configure o cliente HTTP para exigir padrões mínimos de segurança:
import requests
import ssl
from urllib3.util.ssl_ import create_urllib3_context
class SecureCPFClient:
def __init__(self, api_key: str):
self.api_key = api_key
self.session = requests.Session()
# Configurar headers de segurança
self.session.headers.update({
"x-api-key": self.api_key,
"Content-Type": "application/json",
"User-Agent": "CPFClient/1.0 (Secure)",
"Accept": "application/json"
})
# Timeout agressivo para evitar conexões penduradas
self.timeout = (5, 10) # (connect, read) em segundos
def consultar(self, cpf: str) -> dict:
cpf_limpo = cpf.replace(".", "").replace("-", "")
response = self.session.get(
f"https://api.cpfhub.io/cpf/{cpf_limpo}",
timeout=self.timeout,
verify=True # Sempre validar certificado SSL
)
response.raise_for_status()
dados = response.json()
if dados["success"]:
return {
"cpf": self._mascarar_cpf(dados["data"]["cpf"]),
"nome": dados["data"]["name"],
"genero": dados["data"]["gender"],
"nascimento": dados["data"]["birthDate"]
}
return None
def _mascarar_cpf(self, cpf: str) -> str:
"""Mascara o CPF para logs seguros"""
return f"{cpf[:3]}.***.**{cpf[-4:]}"
# Uso seguro
client = SecureCPFClient("SUA_CHAVE_AQUI")
resultado = client.consultar("123.456.789-09")
if resultado:
print(f"CPF: {resultado['cpf']}") # Exibe: 123.***.**-09
print(f"Nome: {resultado['nome']}")
Boas práticas de segurança na transmissão
Adote estas práticas em todas as integrações que envolvam dados de CPF:
- Sempre HTTPS — nunca transmita CPFs via HTTP plano, mesmo em ambientes internos
- Validar certificados — não desabilite a verificação de certificados SSL, mesmo em desenvolvimento
- Mascarar em logs — registre apenas os 3 primeiros e 2 últimos dígitos do CPF nos logs da aplicação
- Rotacionar chaves — altere as chaves de API periodicamente e revogue chaves comprometidas imediatamente
- Princípio do menor privilégio — cada serviço deve ter sua própria chave com permissões mínimas necessárias
Erros comuns que comprometem a segurança
Evite estas práticas que são frequentemente encontradas em códigos de produção:
- Desabilitar SSL verify — usar
verify=Falseem Python ourejectUnauthorized: falseem Node.js elimina a proteção TLS - Logar CPF completo — registrar o CPF inteiro em logs de aplicação cria pontos de vazamento
- Chave de API no código fonte — commitar chaves no repositório expõe credenciais para qualquer pessoa com acesso ao código
- CPF na URL sem HTTPS — parâmetros de URL podem ser logados por proxies e balanceadores em texto plano
- Cache sem criptografia — armazenar CPFs em cache Redis sem criptografia cria vulnerabilidade em caso de acesso não autorizado
Perguntas frequentes
Por que HTTPS não é suficiente por si só para proteger dados de CPF em trânsito?
HTTPS garante criptografia no transporte, mas não protege contra erros na camada de aplicação. A chave de API pode ser exposta em logs de proxy, o CPF pode aparecer em registros da aplicação em texto puro e certificados mal configurados podem ser ignorados com verify=False. A segurança completa exige TLS correto, validação de certificado ativa, máscara de CPF em logs e chaves de API armazenadas em variáveis de ambiente — não no código.
Qual versão de TLS devo exigir nas requisições à API de CPF?
Use TLS 1.2 como mínimo absoluto e prefira TLS 1.3 sempre que possível. O TLS 1.0 e 1.1 foram oficialmente descontinuados e não devem ser aceitos. Na prática, configure o cliente HTTP para rejeitar qualquer versão anterior ao TLS 1.2 — a maioria das bibliotecas modernas já faz isso por padrão, mas é importante verificar explicitamente.
Onde devo armazenar a chave de API para não expô-la?
A chave de API deve ser armazenada em variável de ambiente (CPFHUB_API_KEY) e nunca deve aparecer no código-fonte, em arquivos de configuração versionados ou em logs. Em produção, use um gerenciador de segredos como AWS Secrets Manager, HashiCorp Vault ou o mecanismo nativo da sua plataforma de deploy. Jamais commite arquivos .env com credenciais reais no repositório.
O que fazer se suspeitar que a chave de API foi comprometida?
Revogue a chave imediatamente no painel da CPFHub.io em app.cpfhub.io/settings/billing e gere uma nova. Antes de revogá-la, revise os logs de auditoria para identificar consultas suspeitas — volume anormal, IPs desconhecidos ou horários fora do padrão. Após a troca, atualize todas as variáveis de ambiente e reinicie os serviços que dependiam da chave anterior.
Conclusão
A segurança na transmissão de dados de CPF é uma responsabilidade de todas as camadas da aplicação, do transporte ao armazenamento. Implementar TLS corretamente, validar certificados, mascarar dados em logs e proteger chaves de API são medidas essenciais para conformidade com a LGPD e para evitar vazamentos que geram penalidades severas.
Cadastre-se em cpfhub.io — 50 consultas mensais gratuitas, sem cartão de crédito — e integre consultas de CPF com segurança de ponta a ponta desde o primeiro dia.
CPFHub.io
Pronto para integrar a API?
50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.
Sobre a redação
Redação CPFHub.io
Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.



