Добрый день.

Вопрос простой: как узнать пользователь вошел на мой сайт через прокси или просто?

Есть вар-т анализировать заголовки и переменные сервера $_SERVER.

//////////////////

proxy URI specifying address of proxy server. (e.g. tcp://proxy.example.com:5100 ).

Значит ли это, что юзер который зашел на мой сайт с адреса TCP://proxy... - использует прокси?

Если да то просто беру этот путь из $_SERVER[ "<что-то там>" ], вырезаю первые 3 символа и сравниваю....

<?php

$ip = (empty($_SERVER['HTTP_X_FORWARDED_FOR']) || $_SERVER['HTTP_X_FORWARDED_FOR'] == 'unkown') ? 0 : $_SERVER['HTTP_X_FORWARDED_FOR'];

if (!$ip || $ip != $_SERVER['REMOTE_ADDR'])) {
echo 'Proxy? ';
} else {
echo 'Norm';
}

?>

правда прокси вряд ли мечтают оставить тебе HTTP_X_FORWARDED_FOR?

P.S. ТАМ ГДЕ СМАЙЛ ПРОСТО : и ) слились, то есть часть кода

////////////////

Если HTTP_X_FORWARDED_FOR не существует или равен unkown, то пишем в переменную 0, если нет, то пишем IP адрес.

Далее проверяем переменную. Если равна 0 - выводим "Прокси". Если HTTP_X_FORWARDED_FOR != REMOTE_ADDR, то тоже прокси, только не прозрачный. НЕ прокси только тогда, когда HTTP_X_FORWARDED_FOR == REMOTE_ADDR, причем оба индекса существуют.

Что-то я индекса 'HTTP_X_FORWARDED_FOR' не нашёл в документации по php5. Что это?

Ты там этого и не найдешь...

Ты думаешь в док-тации php5 можно найти инфу насчет прокси-пробивалки?

1). Не все прокси оставляют за собой заголовки, которые бысплатно кидают, то ЛИЧНО Я тестил, многие бесплатные оставляют.
2). В основном берут платные, а это гораздо хуже, потому что они уже не оставляют, а значит отловить на PHP такие уже нельзя.
3). Все означает не %100 результат.


PS
Если боитесь взломщиков, то не волнуйтесь, они работют с high-anonymous proxy, за которые платят, и которые не раскрывают свои заголовки. Поэтому мое мнеие - просто создать очень хорошую структуру для Сайта.

Testing001
был недавно у меня проект один. именно таким способом проверял юзеров на прокси.
ещё можно попробовать подсоединиться через fsockopen к данному ip по определённом диапазону портов (прокси-протов) и почитать поток. если читает - значит прокси.

Добавлено Sun Sep 16 12:58:21 2007 :

НЕ прокси только тогда, когда HTTP_X_FORWARDED_FOR == REMOTE_ADDR, причем оба индекса существуют.

а вот это не всегда верно. на сколько мне известно, HTTP_X_FORWARDED_FOR не существует в большинстве случаев, но у всех прозрачных прокси он есть.

Testing001
Можете посмотреть пример реализации, сделанный на нашем форуме (его код общедоступен). Функция называется get_remote_address()