PDA

View Full Version : چرا توابع php نمی تونن ip بعضی از بازدیدکننده ها رو شناسایی کنن؟



idocsidocs
دوشنبه 16 اردیبهشت 1392, 18:40 عصر
گاهی اوقات پیش می یاد که ip بعضی از بازدیدکنندها شناسایی نمی شه.

این بازدیدکننده ها بعضیاشون با سیمبین وارد سایت می شن.

در کل دلیل شناسایی نشدن ip ها چیه؟

eshpilen
دوشنبه 16 اردیبهشت 1392, 21:08 عصر
دقیقا یعنی چی شناسایی نمیشه.
باید بگردی ببینی کدوم بخش کد چکار میکنه که شناسایی نمیکنه.
شاید برنامت باگ داره :لبخند:

بعدم IP میتونه متعلق به پراکسی باشه، میتون Share باشه.

بهرحال هرکس وارد سایت میشه ‎$_SERVER['REMOTE_ADDR']‎ رو داره. غیرممکنه نداشته باشه.

idocsidocs
دوشنبه 16 اردیبهشت 1392, 22:44 عصر
یادم رفت تابع رو بذارم! :چشمک:

تابعی که برای چک کردن آی پی استفاده می کنم اینه:

بعضی مواقع بجای آی پی کاراکتر - برگردونده می شه!




function check_ip(){
$ip_client = @ $_SERVER['HTTP_CLIENT_IP'];
$ip_x_forward_for = @ $_SERVER['HTTP_X_FORWARDED_FOR'];
$ip_remote_addr = $_SERVER['REMOTE_ADDR'];

if(!empty($ip_client)){
$myip = $ip_client ;
}
elseif (!empty($x_forward_for)){
$myip = $ip_x_forward_for;
}
else{
$myip = $ip_remote_addr;
}

if(preg_match("(^[0-9\.]+$)",$myip)){
return $myip;
}
return '-';
}

eshpilen
سه شنبه 17 اردیبهشت 1392, 00:16 صبح
بهه بابا این روش رو که بنده قبلا چند دفه گفتم حفرهء امنیتی داره!
احتمالا اون چیزهایی هم که شما دریافت میکنید به همین خاطر هستن و توسط برنامه ای جعل شدن.
اینو بخون: http://www.hamidreza-mz.tk/?p=859

اصولا تمام اونایی که اولشون HTTP_‎ داره از هدرهای درخواست کلاینت گرفته میشن و براحتی قابل جعل هستن.
شما نباید برای مقاصد امنیتی به این هدرها اتکا کنید.

idocsidocs
سه شنبه 17 اردیبهشت 1392, 01:05 صبح
منظورتون اینه که کسی اطلاعات هدرش رو تغییر می ده و بعد وارد سایت من می شه؟

اگر فقط از

$_SERVER['REMOTE_ADDR'];
می تونم آی پی کاربرها رو ببینم و دیگه کاراکتر - برگشت داده نشه؟

eshpilen
سه شنبه 17 اردیبهشت 1392, 04:21 صبح
منظورتون اینه که کسی اطلاعات هدرش رو تغییر می ده و بعد وارد سایت من می شه؟
بله کاملا شدنیه. حالا چه از طریق مرورگر و چه از طریق برنامه های دیگر.
ولی لزوما اینطور نیست که کسی خواسته کنترل های شما رو دور بزنه.
شاید علت فنی داره.
اما بهرحال از نظر امنیتی نباید روی صحتش اتکا کرد.


اگر فقط از

$_SERVER['REMOTE_ADDR'];
می تونم آی پی کاربرها رو ببینم و دیگه کاراکتر - برگشت داده نشه؟

بله REMOTE_ADDR همیشه به شما یک IP میده و لاغیر.
IP سیستمی که به سیستم شما وصل شده (درخواست رو ارسال کرده).
ولی خب میدونی که ممکنه آیپی مال یک پراکسی ای چیزی باشه که بین کاربر و شما واسطه قرار گرفته.

MMSHFE
سه شنبه 17 اردیبهشت 1392, 08:33 صبح
کاری به حفره امنیتیش ندارم ولی در کل Pattern که نوشتین هم اشتباهه:


<?php
function check_ip() {
$ip_client = @$_SERVER['HTTP_CLIENT_IP'];
$ip_x_forward_for = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$ip_remote_addr = $_SERVER['REMOTE_ADDR'];
if (!empty($ip_client)) {
$myip = $ip_client ;
}
elseif (!empty($x_forward_for)) {
$myip = $ip_x_forward_for;
}
else {
$myip = $ip_remote_addr;
}
if (preg_match('#^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+#', $myip)) {
return $myip;
}
return '-';
}
?>

1- چرا اول و آخرش Delimiter نگذاشته بودین؟
2- ضمناً الگویی که نوشتین، 127. رو هم بعنوان IP قبول میکنه! اما دقت کنید که IP باید حتماً 4 قسمت عددی داشته باشه که با 3 کارکتر dot از هم جدا شدن.

qartalonline
سه شنبه 17 اردیبهشت 1392, 09:20 صبح
من از کد زیر برای بدست آوردن ip استفاده میکنم . "درباره امنیتش نمیدونم"

<?php
function _get_ip()
{
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)
if(filter_var($ip, FILTER_VALIDATE_IP) !== false)
return $ip ;
}
?>

eshpilen
سه شنبه 17 اردیبهشت 1392, 22:38 عصر
این کد از این نظر که فرمت IP رو چک میکنه بهتره، ولی هنوزم IP که ازش بدست میاد میتونه براحتی جعلی باشه.