web-dev-qa-db-ja.com

米国とカナダを除くすべての国でWebサイトをブロックする方法

私は米国とカナダの訪問者専用のウェブサイトを持っています。他の訪問者に見られたくない。

地域ターゲティングソリューションを使用したいのですが、Amazonホスティングで現在のユーザーのIPアドレスが返されたので、ユーザーの現在地を取得する方法はありますか?それとも別の方法で実行できますか?

2
Dileep Kumar

したがって、タグに基づいて、PHPレベルでこれを実行しようとしていると思います。

私はそれがあなたの唯一のオプションではないことを付け加えるかもしれません、すなわち他のものがあります:

  1. ファイアウォール(CSFはこれに最適です)
  2. ModSecurity
  3. htaccess

だからPHP way

ロジックは基本的にユーザーIPを見て国を決定し、IFステートメントを使用してそのユーザーの国が許可されているかどうかを確認することです(許可されている場合は、拒否します)。

無料の MaxMind(GeoLite2 City)IPデータベース を使用して、ユーザーの出身国を特定します。

_<?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>
_

したがって、最初にこのスクリプトが依存するGeoIP2-php APIをインストールするだけで、次のコマンドを実行できます(概要 ここ )。

  1. _curl -sS https://getcomposer.org/installer | php_
  2. _php composer.phar require geoip2/geoip2:~2.0_

スクリプトを実行するWebサイトディレクトリにIPデータベースをダウンロードする必要があります。

  1. _wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz && gunzip GeoLite2-City.tar.gz_
  2. 次に、_GeoLite2-City.mmdb_をフォルダーからサーバーのディレクトリに移動します。 もちろん、ライセンス、readme、それに付属する著作権表示を確認してください

これがすべて完了したら、スクリプトは動作しますが、必要に応じてスクリプトを変更できますが、現在、ユーザーが$allowed_countries=array("US","CA");行(配列)で指定されていない国からアクセスした場合、403禁止ページ

国が指定されている場合、最初のPHPセクションの下にあるものが表示されます。この場合は_<h1>Welcome</h1>_ページ-これを実装する方法PHPスクリプト特定の状況に依存しています。

2
Ashley Primo