Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

-Адам

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

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

    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

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

1) через 2) x-forwarded-for

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top