بدست آوردن آدرس IP کاربر در PHP

۰
۰

چطور میشه آدرس IP کاربر رو در PHP بطور قابل اطمینانی بدست آورد

۰

بطور پیش فرض آدرس IP کاربر باید با متغیر SERVER['REMOTE_ADDR']_$ قابل استخراج باشه. ولی این آدرس قابل اطمینان نیست. برای مثال اگر کاربر با پروکسی سرور به اینترنت وصل باشه آدرس واقعی کاربر بدست نمیاد و آدرس پروکسی سرور بدست میاد.

کد زیر آدرس دقیق تری رو بدست میده:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

البته تابع بالا ممکن است مشکلات امنیتی داشته باشه چرا که هدر های HTTP_ رو با یک براوزر دست نویس و یا تغییر در کدهای یک براوزر سورس باز میشه تغییر داد.

تابع زیر پیچیده تر هست ولی احتمالا کارکرد بهتری از کد ساده بالا داشته باشه:

function get_ip_address(){
    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); // just to be safe

                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
                    return $ip;
                }
            }
        }
    }
}

 

 

امکان پاسخ دهی به این سوال مسدود شده است


برای ارسال پاسخ برای این سوال باید وارد سایت شوید. برای وارد شدن به سایت نیاز به حساب کاربری سایت سوالات دارید. برای ساختن حساب و یا با وارد شدن با حساب کاربری خود روی دکمه زیر کلیک کنید