Как определить, поступил ли запрос от прокси-сервера? - PullRequest
6 голосов
/ 27 марта 2009

Можно ли определить, поступает ли входящий запрос через прокси-сервер? Если веб-приложение «запрещает» пользователей по IP-адресу, они могут обойти это с помощью прокси-сервера. Это только одна из причин, чтобы заблокировать эти запросы. Как этого достичь?

Ответы [ 4 ]

7 голосов
/ 27 марта 2009

Если прокси-сервер настроен правильно, чтобы избежать обнаружения прокси-серверов, вы не сможете сказать.

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

Вам потребуется использовать несколько методов обнаружения, таких как файлы cookie, обнаружение заголовка прокси-сервера и, возможно, эвристику IP для обнаружения таких ситуаций. Проверьте http://www.osix.net/modules/article/?id=765 для получения некоторой информации об этой ситуации. Также рассмотрите возможность использования черного списка прокси - они публикуются многими организациями.

Тем не менее, ничто не является на 100% уверенным. Вы можете использовать вышеуказанную тактику, чтобы избежать самых простых ситуаций, но в конечном итоге это всего лишь серия пакетов, образующих транзакцию TCP / IP, и протокол TCP / IP не был разработан с учетом современных представлений о безопасности, аутентификации и т. Д. .

Имейте в виду, что многие корпорации используют различные прокси-серверы по разным причинам, и если вы просто блокируете прокси-серверы в качестве общего правила, вы обязательно ограничиваете свою аудиторию, а это не всегда желательно. Однако эти прокси-серверы обычно объявляют себя с соответствующими заголовками - в конечном итоге вы можете блокировать законных пользователей, а не пользователей, которые умеют скрывать себя.

-Adam

7 голосов
/ 27 марта 2009

ИМХО, нет 100% надежного способа добиться этого, но наличие любого из следующих заголовков является убедительным признаком того, что запрос был направлен с прокси-сервера:

via:
forwarded:
x-forwarded-for:
client-ip: 

Вы также можете найти прокси или pxy в имени домена клиента.

1 голос
/ 03 декабря 2011

Сделал немного рыть на это после того, как мой домен был размещается на Google, AppSpot.com с хорошими Жесткое порно объявлений инжектированных в него (благодаря Google).

Взяв лист из этой идеи htaccess Я делаю следующее, что, кажется, работает. Я добавил специальное правило для AppSpot, которое вводит HTTP_X_APPENGINE_COUNTRY ServerVariable.

    Dim varys As New List(Of String)
    varys.Add("VIA")
    varys.Add("FORWARDED")
    varys.Add("USERAGENT_VIA")
    varys.Add("X_FORWARDED_FOR")
    varys.Add("PROXY_CONNECTION")
    varys.Add("XPROXY_CONNECTION")
    varys.Add("HTTP_PC_REMOTE_ADDR")
    varys.Add("HTTP_CLIENT_IP")
    varys.Add("HTTP_X_APPENGINE_COUNTRY")
    For Each vary As String In varys
        If Not String.IsNullOrEmpty(HttpContext.Current.Request.Headers(vary)) Then HttpContext.Current.Response.Redirect("http://www.your-real-domain.com")
    Next
0 голосов
/ 27 марта 2009

Вы можете найти эти заголовки в объекте запроса и, соответственно, решить, является ли запрос через прокси / не

1) Через 2) X-Forwarded-For

обратите внимание, что это не на 100% уверенный трюк, зависит от того, будут ли эти прокси-серверы добавлять вышеупомянутые заголовки.

...