Как запретить все страны, кроме нескольких, с моего сайта - PullRequest
2 голосов
/ 05 ноября 2011

У меня есть форум, на котором целевая аудитория - ТОЛЬКО США, Австралия и Океания.Я хотел бы знать, как я могу запретить всем другим странам доступ к моему форуму, кроме трех вышеупомянутых.У меня были проблемы с регистрацией ботов, и все они пришли с IP-адресов из других стран, поэтому я думаю, что это решит проблему и не будет беспокоить мою целевую аудиторию.сделай это?Советы будут оценены.

Ответы [ 4 ]

3 голосов
/ 05 ноября 2011

Боты используют прокси-серверы по всему миру.Люди, запускающие ботов, знают, как обойти блокировку IP-адресов.

Использование GeoIP для предотвращения регистрации ботов в вашей системе на самом деле не решит проблему с ядром.

Однако в некоторой степени может помочь капчана самом деле он был сломан (в том смысле, что хорошо запрограммированные боты могут решать проблемы с Captcha) в течение нескольких лет.

Модель StackOverflow на самом деле очень хороша ... не позволяйте новому пользователю делать очень много, пока он не получитнемного репутации (например, публиковать сообщения, за которые проголосовали другие пользователи, или требовать, чтобы первые несколько сообщений получили одобрение модератора).

1 голос
/ 24 сентября 2012

С помощью этого кода PHP вы можете разрешить выбранным странам просматривать ваш сайт. Всем остальным пользователям будет показана пустая страница с сообщением о том, что они не могут получить доступ к сайту.

Вы можете установить любое количество стран, добавив && $country != "XY" где XY - код страны, которую вы разрешаете просматривать на своем сайте.

Ниже приведен пример, где Корея и США могут просматривать сайт, а другие нет. С небольшими изменениями вы также можете заблокировать или разрешить выбранные IP-адреса, если хотите

$userIP = get_ipxx(false);
$country = file_get_contents('http://api.hostip.info/country.php?ip=' . $userIP);

if ($country != "KR" && $country != "US") {
    die ('ERROR : SITE IS UNAVAILABLE');
}

function get_ipxx($ip2long = true) {
    if($_SERVER['HTTP_CLIENT_IP']) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    }else if($_SERVER['HTTP_X_FORWARDED_FOR']) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }else{
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    if($ip2long) {
        $ip = ip2long($ip);
    }
    return $ip;
}
1 голос
/ 05 ноября 2011

MaxMind GeoLite City бесплатная база данных может быть легко загружена, обновлена ​​и обработана для локализации IP-адресов.

0 голосов
/ 05 ноября 2011

Самый простой, но довольно грубый способ - получить список IP-адресов для каждой страны (обычно они распределяются примерно по странам, http://www.countryipblocks.net/).. Это может случайно блокировать людей, которые являются законными клиентами, ипо-прежнему разрешать людям, которые не являются законными, заходить на сайт, но он должен обрабатывать 95-99% случаев. Затем вы просто настроите брандмауэр или веб-сервер или любую другую технологию, которую выберете, чтобы заблокировать любой из этих IP-адресов.

...