Como Pegar o IP do Usuário em PHP (Script Completo + Segurança)

<< Aula anterior | Sumário do Curso | Próxima aula >>



Fala, mestre do código! Tudo tranquilo?

Se você está desenvolvendo um sistema de login, um sistema de votos, ou até mesmo um painel de estatísticas, mais cedo ou mais tarde você vai se esbarrar com a seguinte necessidade: "Como eu sei quem é esse usuário acessando minha página?"

A resposta mais fundamental na arquitetura de redes da internet é o famoso Endereço IP.



O que é um Endereço IP e Como Capturá-lo no PHP?

Resposta Direta: Para pegar o IP do usuário em PHP, utilizamos a variável superglobal $_SERVER. O índice padrão é o $_SERVER['REMOTE_ADDR'], porém, para identificar usuários reais que estejam atrás de Proxies ou Load Balancers, devemos verificar também os cabeçalhos HTTP_CLIENT_IP e HTTP_X_FORWARDED_FOR.



O IP (Internet Protocol) é como se fosse o "CPF" ou o "Endereço Residencial" do seu dispositivo na rede. Todo smartphone, computador ou geladeira inteligente conectado à internet que usa o protocolo TCP/IP recebe esse número para ser identificado unicamente na rede.

Sem ele, a internet simplesmente não saberia para onde enviar os dados de volta quando você clica em um link.



A Evolução: Do IPv4 para o IPv6

Historicamente, o IP costumava ser um número de 32 bits, o famoso IPv4. Para facilitar o entendimento dos nós humanos, esse número é dividido em 4 blocos (octetos), separados por pontos.
Exemplo: 192.168.1.2

Porém, com o crescimento explosivo da grande rede (agora até a coleira do cachorro tem internet), os endereços IPv4 se esgotaram. A solução foi atualizar a arquitetura para o IPv6, que possui 128 bits e utiliza um formato hexadecimal bem maior, suportando um número praticamente infinito de dispositivos.

💡 Dica de Mestre: O seu código PHP precisa estar preparado para ler tanto o formato IPv4 quanto o IPv6. Afinal, a migração global já é uma realidade!


Como pegar o IP do Usuário na Prática (Script em PHP)

A princípio, você pode pensar: "É só usar o REMOTE_ADDR e pronto!". Mas a vida de um desenvolvedor web não é tão simples. Muitos usuários acessam a internet por meio de conexões corporativas, Proxies, VPNs ou servidores de balanceamento de carga (como a Cloudflare).

Quando isso acontece, o REMOTE_ADDR vai te devolver o IP do Proxy, e não do usuário real. Para resolver isso, fazemos uma cascata de verificações buscando cabeçalhos específicos. Veja o algoritmo clássico e eficaz:



<?php
/**
 * Script Progressivo para capturar o IP real do usuário
 * @return string Endereço IP
 */

$ip_address = '';

// 1. Verifica se o IP foi passado diretamente por um cliente (Ex: internet compartilhada)
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip_address = $_SERVER['HTTP_CLIENT_IP'];
}
// 2. Verifica se o IP está vindo de um Proxy ou Load Balancer (Ex: Cloudflare, VPNs)
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    // O X-Forwarded-For pode retornar uma lista de IPs. O primeiro costuma ser o real.
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
// 3. Caso não haja proxy, pega o endereço remoto padrão (Conexão direta)
else {
    $ip_address = $_SERVER['REMOTE_ADDR'];
}

echo "O seu Endereço IP é: " . $ip_address;
?>


Entendendo o Código passo a passo:

  • HTTP_CLIENT_IP: É um cabeçalho que algumas redes enviam para identificar o IP da máquina na rede local antes de sair para a internet.
  • HTTP_X_FORWARDED_FOR: É o padrão de ouro para identificar usuários passando por Proxies. Se o usuário usa uma rede corporativa, o proxy anota o IP original do funcionário aqui antes de enviar a requisição para o seu servidor.
  • REMOTE_ADDR: O IP da máquina que está efetivamente batendo no seu servidor Apache/Nginx.


Cansado de pesquisar códigos pela metade no Google?

Entender variáveis superglobais é só o começo. O mercado não paga por quem "copia e cola", paga por quem entende a Lógica do Backend. Domine o PHP do zero ao avançado, sem distrações, sem anúncios piscando, estudando offline onde e quando quiser.

Apostila PHP Progressivo
Baixar Apostila Completa em PDF 🚀


⚠️ Atenção com a Cibersegurança: Nunca confie cegamente no usuário

Como desenvolvedores Full-Stack, precisamos pensar como hackers. Você reparou que usamos variáveis baseadas em cabeçalhos HTTP (os que começam com HTTP_)?

A grande pegadinha do desenvolvimento web é que qualquer cabeçalho HTTP pode ser falsificado (Spoofing). Um usuário mal intencionado pode usar ferramentas como o Postman ou cURL para forçar a variável HTTP_X_FORWARDED_FOR e enviar um IP falso (por exemplo, 127.0.0.1) para enganar o seu sistema de bans e firewall.

🛠️ Regra de Ouro da Segurança em PHP: O ÚNICO cabeçalho que não pode ser falsificado pelo cliente é o $_SERVER['REMOTE_ADDR']. Ele é gerado diretamente pela conexão TCP do seu servidor Web. Use os outros cabeçalhos para melhorar a estatística e exibir a localidade, mas se for para bloquear ou banir um usuário por questões críticas de segurança, armazene e confie prioritariamente no REMOTE_ADDR.


Se você quer limpar e garantir que o dado recebido é realmente um endereço IP válido antes de salvar no seu Banco de Dados MySQL, o PHP possui uma função maravilhosa chamada filter_var():

<?php
// Valida se a string capturada é realmente um IP válido (IPv4 ou IPv6)
if (filter_var($ip_address, FILTER_VALIDATE_IP)) {
    echo "O IP {$ip_address} é um endereço válido no formato de redes!";
    // Código para salvar no Banco de Dados...
} else {
    echo "Endereço IP inválido. Cuidado com injeção de dados falsos!";
}
?>


Quer a biblioteca completa do Programador de Elite?

Leve não só o PHP, mas C, C++, Redes, Java, HTML e CSS de uma vez só.

Mega Pack 7 Apostilas de Programação



Consolide seu Conhecimento

Não pare por aqui! Para dominar a arquitetura de backend e como o seu servidor se comunica com o mundo externo, recomendamos fortemente o estudo dos seguintes tópicos da nossa rede:



<< Aula anterior | Sumário do Curso PHP | Próxima aula >>

Nenhum comentário: