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/
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.