Como bloquear o site de todos os países, exceto EUA e Canadá

1

Eu tenho um site que é apenas para visitantes dos EUA e Canadá. Eu não quero torná-lo visível para outros visitantes.

Eu quero usar a solução de segmentação geográfica, mas tenho uma hospedagem amazônica que retornou o endereço IP do usuário atual. Existe alguma maneira de obter a localização atual do usuário ou se podemos fazê-lo de outra maneira?

    
por Dileep Kumar 25.05.2018 / 13:14

1 resposta

1

Portanto, com base nas tags, acho que você está tentando fazer isso no nível do PHP.

Posso acrescentar que não é sua única opção, há outras, a saber:

  1. Firewall (o CSF é perfeito para isso)
  2. ModSecurity
  3. htaccess

Então, o caminho do PHP

A lógica é essencialmente apenas olhar para o IP do usuário, determinar um país e, em seguida, usar uma instrução IF para ver se esse país do usuário é permitido (se sim, faça alguma coisa, negue)

Usaremos o banco de dados de IP MaxMind (GeoLite2 City) gratuito para determinar o país de origem do usuário.

<?php

// MaxMind Setup
require_once 'vendor/autoload.php';
use GeoIp2\Database\Reader;

$db =new Reader('GeoLite2-City.mmdb');
$client_ip=$db->city($_SERVER['REMOTE_ADDR']);
$client_country=$client_ip->country->isoCode;

// Specification of allowed_countries
$allowed_countries=array("US","CA");

// Blocking Logic
if(!in_array($client_country,$allowed_countries)) {
  header("HTTP/1.0 403 Forbidden");
  echo "<h1>Access Forbidden!</h1>";
  echo "<p>You are accessing from $client_country which is forbidden.</p>";
  exit();
}
?>

<html>
<head>
<title>Example Success</title>
</head>
<body>
<h1>Welcome</h1>
<p>You have access to this website.</p>
</body>
</html>

Então, tudo o que você precisa fazer é primeiro instalar a API GeoIP2-php na qual esse script se baseia - para isso, execute os seguintes comandos (como descrito aqui ):

  1. curl -sS https://getcomposer.org/installer | php
  2. php composer.phar require geoip2/geoip2:~2.0

Agora você precisará baixar o banco de dados do IP para o diretório do site onde o script será executado.

  1. wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz && gunzip GeoLite2-City.tar.gz
  2. Você então deseja mover o GeoLite2-City.mmdb da pasta para o diretório do servidor. Assegure-se, claro, de verificar as licenças, leia-me e avisos de direitos autorais que vêm com ele .

Depois de fazer tudo isso - o script funcionará, você pode modificá-lo conforme necessário, mas atualmente, se o usuário acessar de um país não especificado na linha $allowed_countries=array("US","CA"); (matriz), eles serão recebidos com um 403 Página Proibida .

Se o país for especificado, qualquer coisa abaixo da seção inicial do PHP será exibida - neste caso <h1>Welcome</h1> page - como você implementa este script PHP depende da sua circunstância específica.

    
por 27.05.2018 / 23:34