PHP ile Ülke Koduna Göre Ziyaretçi IP Adresi Engelleme

IIS Web.Config ile SEO Uyumlu Domain Yönlendirme Nasıl Yapılır?
3 Ocak 2019
cPanel’de “Web Disk” Nedir, Nasıl Kullanılır?
2 Mart 2019

Oluşturduğunuz projenize birçok sebepten ötürü, ülkelerden girişleri engellemek isteyebilirsiniz. Bu en doğal hakkınız. Fakat bu işlemi .htaccess üzerinden takip etmeyi denediğinizde, ülke bazlı IP class’larının sık sık değiştiği için zamanla işe yaramadığını görebilirsiniz. Bu da sizin IP bloklarını sık sık güncellemeniz anlamını taşır. Bunun yerine daha pratik bir çözüm geliştirdik. Aşağıdaki kod bütünü sitenizi ziyaret eden IP’nin anlık sorgusunu yaparak ülke koduna ulaşıyor ve sizin yasaklı listenizde ise, ziyaretçiye 403 Engel yanıtını gönderip çalışmayı durduruyor.

Aşağıdaki satırları, index.php veya ortak kullanılan (örn: config.php gibi) PHP dosyanızın en üstüne, <?php satırının hemen altına ekleyebilirsiniz:

// ZİYARETÇİ IP'SİNİN ÜLKE KODUNA GÖRE ENGELLEME - www.domainhizmetleri.com
function ip_info($ip = NULL, $purpose = "location", $deep_detect = TRUE) {
    $output = NULL;
    if (filter_var($ip, FILTER_VALIDATE_IP) === FALSE) {
        $ip = $_SERVER["REMOTE_ADDR"];
        if ($deep_detect) {
            if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP))
                $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
            if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP))
                $ip = $_SERVER['HTTP_CLIENT_IP'];
        }
    }
    $purpose    = str_replace(array("name", "\n", "\t", " ", "-", "_"), NULL, strtolower(trim($purpose)));
    $support    = array("country", "countrycode", "state", "region", "city", "location", "address");
    $continents = array(
        "AF" => "Africa",
        "AN" => "Antarctica",
        "AS" => "Asia",
        "EU" => "Europe",
        "OC" => "Australia (Oceania)",
        "NA" => "North America",
        "SA" => "South America"
    );
    if (filter_var($ip, FILTER_VALIDATE_IP) && in_array($purpose, $support)) {
        $ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip));
        if (@strlen(trim($ipdat->geoplugin_countryCode)) == 2) {
            switch ($purpose) {
                case "location":
                    $output = array(
                        "city"           => @$ipdat->geoplugin_city,
                        "state"          => @$ipdat->geoplugin_regionName,
                        "country"        => @$ipdat->geoplugin_countryName,
                        "country_code"   => @$ipdat->geoplugin_countryCode,
                        "continent"      => @$continents[strtoupper($ipdat->geoplugin_continentCode)],
                        "continent_code" => @$ipdat->geoplugin_continentCode
                    );
                    break;
                case "address":
                    $address = array($ipdat->geoplugin_countryName);
                    if (@strlen($ipdat->geoplugin_regionName) >= 1)
                        $address[] = $ipdat->geoplugin_regionName;
                    if (@strlen($ipdat->geoplugin_city) >= 1)
                        $address[] = $ipdat->geoplugin_city;
                    $output = implode(", ", array_reverse($address));
                    break;
                case "city":
                    $output = @$ipdat->geoplugin_city;
                    break;
                case "state":
                    $output = @$ipdat->geoplugin_regionName;
                    break;
                case "region":
                    $output = @$ipdat->geoplugin_regionName;
                    break;
                case "country":
                    $output = @$ipdat->geoplugin_countryName;
                    break;
                case "countrycode":
                    $output = @$ipdat->geoplugin_countryCode;
                    break;
            }
        }
    }
    return $output;
}

// Engellenecek ülkelerin Country Kod'larını aşağıdaki array içine ekleyebilirsiniz
// 2 Harfli ISO kodlarını buradan bulabilirsiniz: https://www.nationsonline.org/oneworld/country_code_list.htm
$engelli_ulke_kodlari=array("RU"=>0, "FR"=>0, "CN"=>0, "CO"=>0);

$ziyaretci_ulke_kodu = ip_info("Visitor", "Countrycode");
if (array_key_exists($ziyaretci_ulke_kodu,$engelli_ulke_kodlari)){
  header('HTTP/1.1 403 Forbidden'); 
  echo "Forbidden Country IP! / Yasaklı Ülke IP'si";
  die();
}

// SON - ZİYARETÇİ IP'SİNİN ÜLKE KODUNA GÖRE ENGELLEME - www.domainhizmetleri.com

 

Bu makale yardımcı oldu mu?

6
Kimler Neler Demiş?

avatar
4 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
5 Comment authors
ÖmerturgaytekzenMurat TahtacıTevfik Recent comment authors
  Subscribe  
En Yeniler Eskiler
Bildir
Tevfik
Ziyaretçi

Merhaba. Websiteme japonya üzerinden sürekli link geliyor ve sürekli google sıralamadan kaybolmasına sebep oluyor. düz html sayfa içine eklerken nasıl ekleme yapmamı önerirsiniz acaba?

tekzen
Ziyaretçi
tekzen

PHP üzeri Yurtdisi engelleme nasil kaldirilir?
Önek vereyim yurtdisindan Türkiye adresini acma nasil calisir

turgay
Ziyaretçi
turgay

Merhaba bu kod çok güzel ama şu şekilde ayarlıyabilirmisiniz , mesela 37.154 ve 92.235 ip bloğundan adana ve mersinden giriş yapan kişileri başka sayfaya yönlendirsin olmaz mı

Ömer
Ziyaretçi
Ömer

Allah razı olsun çok işime yaradı. Türkiye’yi engelledim ama kendi ip adresimi engellemek istemiyorum bunun bir yolu var mı? Bir de vpn kullananlar yine erişebiliyor vpn tespit edip engellemenin bir yolu var mıdır? Teşekkür ederim 🙂

Ömer
Ziyaretçi
Ömer

Keşke cevapta yazsanız ne güzel olurdu 🙂

Show Buttons
Hide Buttons