Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как идентифицировать пользователя?


Автор: BuShaRt 30.7.2007, 15:14
Как с наибольшей точностью, можно определить то, что пользователь заходит с одного и того же компьютера? 

Автор: FlameTH 30.7.2007, 15:19
мак-адрес.

Автор: BuShaRt 30.7.2007, 15:41
FlameTH, 
Это что такое? smile

Автор: Rezzonans 30.7.2007, 15:56
это аппаратный адрес, к примеру сетевой карты. Вопрос в том, как до этой макушки достучаться из пхп, а 
FlameTH ? Было б интересно узнать

Автор: teroni 30.7.2007, 16:08
По-моему, со стопроцентной надёжностью никак. Куки пользователь может удалить, ай-пи адресс может меняться либо быть одинаковым для нескольких юзеров. Так что самое надёжное - дать возможность пользователю зарегистрироваться, а там уже пускай заходит с любого компьютера.

Автор: Rezzonans 30.7.2007, 16:20
Цитата

По-моему, со стопроцентной надёжностью никак. Куки пользователь может удалить, ай-пи адресс может меняться либо быть одинаковым для нескольких юзеров. Так что самое надёжное - дать возможность пользователю зарегистрироваться, а там уже пускай заходит с любого компьютера. 


Тоже правильно. Единственное, что, пользователя, в таком случае нужно заставлять регестрироваться - это во-первых. Во вторых вопросы связанные с баном отпадают, ибо забанить или удалить учётную запись можно всегда, но в этом случае можно и перерегестрироваться. Блокировка по mac в таком случае представляется более реальной. Хотя и макушку тоже можно эмулировать другую. Но это ещё суметь надо smile

Добавлено через 7 минут и 15 секунд
к тому ж в этом случае можно заходить с разных компов в одну учётную запись

Автор: Flashdown 30.7.2007, 16:42
Цитата(BuShaRt @ 30.7.2007,  15:14)
Как с наибольшей точностью, можно определить то, что пользователь заходит с одного и того же компьютера?

100%-но никак не определить... 
если нужна идентификация пользователя - делай стандартную регистрацию...

Автор: BuShaRt 30.7.2007, 18:51
Регистрация есть, нужно отслеживать заходы с одного компьютера более чем одним пользователем. 
Что нету 100%ых решения я знаю, но интересен оптимальный...


FlameTH, 
Так как достучаться до мак-адреса? smile

Всем,
На сколько хватает моих познаний в этом вопросе, мне кажеться что куки+ip оптимальное решение, это так?
Если IP, то как быть с проксями, по каким именно данным нужно идентефезировать пользователя заходяшего через прокси?

Добавлено через 1 минуту и 49 секунд
мне не надо не кого блокировать, мне надо для журнала заходов и выявления тех, кто заходит с нескольких учетных записей на одном компьютере smile

Автор: Diesel Draft 31.7.2007, 10:08
FlameTH, А как ты мак узнаешь? 

Автор: Golda 31.7.2007, 14:11
Если есть доступ к изменениям прав, дать apache через sudo права на выполнение ifconfig. Тогда можно будет из php вызвать эту shell-команду и выпарсить из результата MAC-адрес.

Добавлено через 12 секунд
Если есть доступ к изменениям прав, дать apache через sudo права на выполнение ifconfig. Тогда можно будет из php вызвать эту shell-команду и выпарсить из результата MAC-адрес.

Автор: Diesel Draft 31.7.2007, 14:16
Golda, А скорость? (интересно)

Автор: Golda 31.7.2007, 14:24
Заходы разных пользователей с помощью MAC-адрес не определишь. Сетевая карточка на всех пользователей одна, и MAC-адрес, соответственно, тоже.

Дальше. IP у разных пользователей с одной машины может быть один, а могут быть и у одного разные (например, что сегодня DHCP выдал, если там мало IP зарезервировано). Куки лучше, если в броузере пользователя не отключен прием кук, но легко подменяются. Так что если есть опасения, что кому-то будет смысл подменять куки, лучге рассчитывать не на куки, а на сессию. Заодно снимается проблема отключения кук. Передача идентификатора сесси может идти и через GET.

Относительно прокси. Если используется анонимный - никак. А "честные" прокси пересылают адрес реального пользователя в заголовках запроса. Можно поискать 

$_SERVER['HTTP_CLIENT_IP')
$_SERVER('HTTP_X_FORWARDED_FOR')
$_SERVER('HTTP_X_FORWARDED')
$_SERVER('HTTP_FORWARDED_FOR')
$_SERVER('HTTP_FORWARDED')
$_SERVER['HTTP_VIA']

Возможно есть еще варианты. Поищите по форуму. Видела как-то тему, в которой собрали достаточно много таких заголовков

Добавлено через 1 минуту и 28 секунд
Цитата(Diesel Draft @  31.7.2007,  14:16 Найти цитируемый пост)
Golda, А скорость? (интересно) 


Не знаю, поэкспериментирую - напишу. Но в любом случае MAC-адрес для данной задачи не подходит

Автор: Golda 31.7.2007, 14:45
Да, люди, прошу прощения. Что-то я написала, не подумав, о чем речь. Тем способом, что я указала, узнается MAC-адрес сервера, а никак не клиента. 
Заработалась, видно  smile 

Автор: Diesel Draft 31.7.2007, 16:08
ну что, MAC-адрес самый надежный способ (другие еще хуже)

Автор: Golda 31.7.2007, 16:15
Почему? Для задачи различить разных пользователей, сидящих за одной машиной, он не подходит. Я бы анализировала сочетание Куки + IP + данные сессии. В сессию можно запихнуть еще пару проверочных моментов типа UserAgent, AcceptLanguage

Добавлено через 1 минуту и 36 секунд
Анализируя IP, нужно смотреть, конечно, вариант proxy

Автор: Diesel Draft 31.7.2007, 16:23
Цитата

Как с наибольшей точностью, можно определить то, что пользователь заходит с одного и того же компьютера



МАК > Куки > ІР (по спаданию надежности)

Автор: BuShaRt 31.7.2007, 20:39
так как узнать этот МАК адрес то? smile))))

Автор: NNaarreekk 31.7.2007, 22:37
Есть же сотни тысяч голосований, в которых как-то определяют бил вход с компа или нет!

Как это делают?

Почти уверен что ничего сложного потому что на занюханных сайтах тоже видел!

Автор: Daevaorn 31.7.2007, 22:56
Цитата(NNaarreekk @  31.7.2007,  23:37 Найти цитируемый пост)

Как это делают?

куки, сессии, фильтр по IP(опционально)

Автор: sTa1kEr 31.7.2007, 23:03
Цитата(BuShaRt @  30.7.2007,  18:51 Найти цитируемый пост)
Так как достучаться до мак-адреса? 

Из интернета - никак. MAC можно узнать только в локальной сети. Самый простой способ, просмотреть arp кэш.
Код

system("arp - a");

Однако, если IP не привязан к конкретному MAC адресу, то изменить его еще проще, чем IP. А если привязан, то проверки по IP будет более чем достаточно.  В любом случае вам не подходит этот способ.

Цитата(BuShaRt @  30.7.2007,  18:51 Найти цитируемый пост)
На сколько хватает моих познаний в этом вопросе, мне кажется что куки+ip оптимальное решение, это так?

Да, это самое оптимальное решение. Golda хорошо описала этот момент. Я могу лишь добавить  пару комментариев.

Цитата(Golda @  31.7.2007,  14:24 Найти цитируемый пост)
$_SERVER['HTTP_VIA']

Этот заголовок может помочь определить используется ли прокси сервер, но он содержит IP самого прокси сервера. Т.е. если этот заголовок присутствует, но нету ни одного другого заголовка прокси сервера - то скорее всего используется анонимный прокси сервер.

Так же, если найден заголовок прокси с IP клиента, следует сверить его с REMOTE_ADDR. Если они идентичны - это анонимный прокси.

Еще один способ проверить является ли IP общедоступного прокси сервера - http://ru.wikipedia.org/wiki/DNSBL. Использовать можно следующим образом:
Код

define("DNSBL", "xbl.spamhaus.org");
//define("DNSBL", "proxy.bl.gweep.ca");

function isBlackProxy($ip)
{
   $rIp = implode(".", array_reverse(explode('.', $ip)));
   $host = gethostbyname($rIp.".".DNSBL);
   return !($ip == $host);
}

$ip = $_SERVER["REMOTE_ADDR"];
if (isBlackProxy($ip))
{
   echo "IP '$ip' is blacklisted proxy-server";
}
else
{
   echo "IP '$ip' is clean";
}


Автор: Rezzonans 1.8.2007, 10:07
Да, походу дела, мак - не вариант. Вычитал тут на одном форуме пару постов и понял, что мак адрес идёт до первого маршрутизатора, дальше его заменяет макушка маршрутизатора итд. Короче хрен его откопаешь этот мак адрес за пределами локальной сети. Таким образом остаётся только вариант ip+cookie. Пока других альтернатив не вижу

Автор: Diesel Draft 1.8.2007, 12:13
Цитата

Да, походу дела, мак - не вариант. Вычитал тут на одном форуме пару постов и понял, что мак адрес идёт до первого маршрутизатора, дальше его заменяет макушка маршрутизатора итд. 


Но маршрут то запоминается и можно узнать

Цитата

Короче хрен его откопаешь этот мак адрес за пределами локальной сети. Таким образом остаётся только вариант ip+cookie. Пока других альтернатив не вижу 


Возможно ты прав. Старый хороший способ

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)