Pular para o conteúdo
Todos os conceitos

Forjar cabeçalhos de pedido

Os cabeçalhos que o navegador envia (Referer, User-Agent) são escolhidos pelo cliente, então não servem para decidir acesso.

Todo pedido HTTP leva cabeçalhos, linhas de nome: valor com informação extra sobre quem está pedindo. Dois aparecem muito:

  • Referer: de qual página você veio (por exemplo, um resultado de busca).
  • User-Agent: qual navegador e aparelho você é (Chrome no Windows, Safari no iPhone).

O ponto que importa: quem monta o pedido escolhe o que escrever nesses cabeçalhos. O navegador os preenche sozinho no uso normal, mas nada obriga. Com curl, o Referer vai em -e e o User-Agent em -A:

curl -e "https://www.google.com/" https://site.example/
curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) ..." https://site.example/
Navegador vindo do Google $ curl -e escrito à mão o mesmo pedido GET / HTTP/1.1 Host: site.example Referer: https://www.google.com/ o servidor só vê este texto, igual nos dois casos site.example
O navegador que veio do Google e o curl com -e mandam o mesmo texto, com o mesmo Referer: o servidor não tem como saber quem escreveu o cabeçalho.

No navegador, as Ferramentas de Desenvolvedor trocam o User-Agent no modo dispositivo, e extensões editam qualquer cabeçalho.

Por isso, um site que mostra conteúdo diferente "só para quem vem do Google" ou "só para celular" não está protegendo nada: basta forjar o cabeçalho que ele confia. Decisão de acesso tem que vir de algo que o cliente não controla (uma sessão autenticada, por exemplo), nunca de Referer ou User-Agent.

Aparece nestes desafios