Em outras palavras, como posso saber se a pessoa que usa meu aplicativo da web está no servidor em que reside? Se bem me lembro, PHPMyAdmin faz algo assim por razões de segurança.
99
Você também pode usar $_SERVER['REMOTE_ADDR']
para qual endereço IP da solicitação do cliente é fornecido pelo servidor da web.
$whitelist = array(
'127.0.0.1',
'::1'
);
if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
// not valid
}
Host: 127.0.0.1
e ele será preenchidoHTTP_HOST
, portanto, não é um método confiável.$whitelist = array('127.0.0.1', '::1');
Como complemento, como função ...
fonte
Usuários mais novos do sistema operacional (Win 7, 8) também podem achar necessário incluir um endereço remoto de formato IPV6 em sua lista de permissões:
fonte
$_SERVER["REMOTE_ADDR"]
deve informar o IP do usuário. É spoofable, no entanto.Verifique esta pergunta generosa para uma discussão muito detalhada.
Acho que o que você lembra com PHPMyAdmin é algo diferente: muitos servidores MySQL são configurados de forma que só possam ser acessados do host local por motivos de segurança.
fonte
Sinto muito, mas todas essas respostas parecem terríveis para mim. Eu sugeriria reformular a pergunta porque, de certo modo, todas as máquinas são "localhost".
A pergunta deve ser; Como executo caminhos de código diferentes, dependendo da máquina em que ele é executado.
Na minha opinião, a maneira mais fácil é criar um arquivo chamado DEVMACHINE ou o que você realmente quiser e então simplesmente verificar
Lembre-se de excluir este arquivo ao enviar para o ambiente de hospedagem ao vivo!
Esta solução não depende da configuração da rede, não pode ser falsificada e torna mais fácil alternar entre a execução de "live-code" e "dev-code".
fonte
Não parece que você deva usar
$_SERVER['HTTP_HOST']
, porque este é o valor no cabeçalho http, facilmente falsificado.Você também pode usar
$_SERVER["REMOTE_ADDR"]
, este é o valor mais seguro, mas também é possível falsificar. Esteremote_addr
é o endereço para onde o Apache retorna o resultado.fonte
REMOTE_ADDR
é possível falsificar, porém, se você quiser fingir como127.0.0.1
ou::1
, isso requer comprometer a máquina, em que o spoofingREMOTE_ADDR
é a menor de suas preocupações. Resposta relevante - stackoverflow.com/a/5092951/3774582Se você deseja ter uma whitelist / allowlist que suporte IPs estáticos e nomes dinâmicos .
Por exemplo:
Desta forma, você pode definir uma lista de nomes / IPs que poderão (com certeza) ser detectados. Os nomes dinâmicos adicionam mais flexibilidade para acessar de diferentes pontos.
Você tem duas opções comuns aqui, você pode definir um nome em seu arquivo de hosts local ou você pode apenas usar um provedor de nome dinâmico que pode ser encontrado em qualquer lugar.
Esta função CACHES resulta porque gethostbyname é uma função muito lenta.
Para este propósito, implementei esta função:
Para melhor confiabilidade, você poderia substituir $ _SERVER ['REMOTE_ADDR'] pelo get_ip_address () que @Pekka mencionou em seu post como "esta questão de recompensa"
fonte
Que tal comparar
$_SERVER['SERVER_ADDR'] === $_SERVER['REMOTE_ADDR']
para determinar se o cliente está na mesma máquina que o servidor?fonte
$_SERVER['SERVER_ADDR']
nem sempre retorna o endereço do servidor de forma confiável, por exemplo, se estiver usando balanceadores de carga, ele retorna o endereço IP do balanceador de carga que eu acredito.Eu encontrei uma resposta fácil.
Porque todas as unidades locais têm C: ou D: ou F: ... etc.
Apenas detecte se o segundo caractere é um:
fonte