Как узнать, поступает ли запрос от прокси?
-
22-08-2019 - |
Вопрос
Можно ли определить, делается ли входящий запрос через прокси-сервер?Если веб-приложение «банит» пользователей по 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
Обратите внимание, что это не стопроцентно верный трюк, все зависит от того, решат ли эти прокси-серверы добавить вышеуказанные заголовки.