Laravel İle Cloudflare Kullanan Sunucuda Müşteri IP Adresini Yakalamak

3 Oca 2022
Laravel İle Cloudflare Kullanan Sunucuda Müşteri IP Adresini Yakalamak

Herkese merhaba,

Laravel'de kullanıcının ip adresini almak istediğimizde aşağıdaki fonksiyondan faydalanabiliyoruz:

request()->ip()

Bu bize istekte bulunan kullanıcının ip adresini getiriyor.

Ancak eğer projenizin bulunduğu sunucu, Cloudflare'in arkasında ya da load balancer gibi başka bir proxy hizmetinin arkasında çalışıyorsa;

bu fonksiyon size her zaman CloudFlare'nin ip adresini döndürecektir.

Bazı durumlarda bu işimize gelmeyebilir. Örneğin, giriş yapan kullanıcının IP adreslerini LOG lamak isteyebiliriz.

Bunun için global Helper dosyamıza bir fonksiyon yazalım. Kendi Helper sınıfınızı oluşturmayı bilmiyorsanız burada temellerinden bahsetmiştik.

Şimdi Helper sınıfımızın içerisine statik bir fonksiyon tanımlayalım:

public static function getIp(){
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){
        if (array_key_exists($key, $_SERVER) === true){
            foreach (explode(',', $_SERVER[$key]) as $ip){
                $ip = trim($ip); 
                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
                    return $ip;
                }
            }
        }
    }
    return request()->ip(); // ip adresini yakalayamazsa server ip sini getirecek
}

Artık tek yapmamız gereken, ip adresini almamız gereken yerlerde request()->ip(); kullanmak yerine kendi fonksiyonumuzu çağırmamız;

use app\Support\Helper;

Helper::getIp();

İşlem tamam.

UYARI: Eğer Laravel'in throttle middleware'ini kullanıyorsanız dikkatli olmanızda yarar var. Laravel'in, kullanıcının ip adresini takip etmek için request()->ip() kullandığı yerler olabiliyor.

Oradaki kullanımları da kendi Helper'ınızdaki fonksiyonu çağırarak ezebilirsiniz. Bu sayede olası sağlıksız davranışların önüne geçmiş olursunuz.

Bir başka makalede görüşmek dileğiyle...

YAZAR : Boran BAR