No desenvolvimento moderno, o consumo de APIs de terceiros é onipresente, seja para pagamentos, autenticação, geolocalização ou inteligência artificial. No entanto, essa conveniência traz riscos significativos: dados maliciosos podem ser injetados, informações sensíveis podem vazar e dependências podem se tornar vetores de ataque. Esta aula explora três princípios fundamentais para proteger sua aplicação ao integrar APIs externas: trust boundaries, scrubbing e data minimization.

Esses conceitos são complementares: trust boundaries definem o perímetro de segurança, scrubbing limpa os dados que cruzam esse perímetro e data minimization reduz a superfície de exposição. Ao dominar esses pilares, você estará apto a construir integrações robustas, resilientes e em conformidade com boas práticas de segurança.

Trust boundaries

Uma trust boundary é uma fronteira lógica que separa componentes com diferentes níveis de confiança. Quando sua aplicação consome uma API de terceiros, você está cruzando uma trust boundary: o código externo não é confiável por padrão. Isso significa que todos os dados recebidos devem ser tratados como potencialmente maliciosos, mesmo que a fonte seja uma empresa respeitável. A violação dessa fronteira pode ocorrer por meio de respostas adulteradas, ataques man-in-the-middle ou dados corrompidos.

Na prática, você deve desenhar sua arquitetura de forma que o tratamento de dados externos ocorra em um módulo isolado, com validações rigorosas. Por exemplo, se você integra uma API de clima, não confie cegamente no campo "temperatura" para exibir no HTML: valide o tipo, o intervalo e o formato antes de usar. Além disso, considere o uso de redes segregadas, proxies e firewalls para reforçar a fronteira.

Exemplo de validação de dados recebidos de uma API fictícia:

# Exemplo em Python (pseudo-código)
resposta = api_clima.cidade("São Paulo")
temperatura = resposta.get("temperatura")

# Validar tipo e faixa
if not isinstance(temperatura, (int, float)) or not (-50 <= temperatura <= 50):
    raise ValueError("Dados inválidos da API de clima")

# Usar o dado somente após validação
print(f"Temperatura: {temperatura}°C")

Isso impede que um valor inesperado cause erros ou, pior, seja usado em uma injeção de comando.

Scrubbing

Scrubbing refere-se ao processo de limpeza e normalização dos dados recebidos de fontes externas antes de utilizá-los. Isso envolve remover caracteres perigosos, escapar HTML, sanitizar entradas e garantir que os dados estejam no formato esperado. O objetivo é eliminar qualquer conteúdo que possa ser interpretado como código ou comando pelo seu sistema.

Um exemplo clássico é a prevenção de XSS (Cross-Site Scripting) em respostas de APIs que são renderizadas no navegador. Se uma API retorna um campo "nome" que você exibe em uma página web, um atacante pode injetar uma tag