11

是否可以检测是否通过代理服务器发出传入请求?如果 Web 应用程序通过 IP 地址“禁止”用户,他们可以通过使用代理服务器来绕过它。这只是阻止这些请求的原因之一。如何做到这一点?

4

4 回答 4

12

恕我直言,没有 100% 可靠的方法来实现这一点,但以下任何标头的存在都强烈表明请求是从代理服务器路由的:

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

您还可以在客户端域名中查找代理pxy 。

于 2009-03-27T14:49:49.547 回答
9

如果代理服务器设置正确以避免代理服务器的检测,您将无法判断。

正如其他人提到的那样,大多数代理服务器都提供标头,但这些标头并不存在于旨在完全隐藏用户的代理上。

您将需要使用多种检测方法,例如 cookie、代理标头检测,也许还有 IP 启发式来检测此类情况。查看http://www.osix.net/modules/article/?id=765了解有关这种情况的一些信息。还可以考虑使用代理黑名单 - 它们由许多组织发布。

然而,没有什么是 100% 确定的。您可以采用上述策略来避免大多数简单的情况,但归根结底,它只是一系列形成 TCP/IP 事务的数据包,而 TCP/IP 协议并不是按照当今的安全、身份验证等思想开发的.

请记住,许多公司出于各种原因部署公司范围的代理,如果您只是作为一般规则阻止代理,则必然会限制您的受众,这可能并不总是可取的。但是,这些代理通常会使用适当的标头来宣布自己 - 您最终可能会阻止合法用户,而不是善于隐藏自己的用户。

-亚当

于 2009-03-27T14:58:30.650 回答
3

在我的域名托管在 Google 的 AppSpot.com 上并在其中注入了不错的硬核色情广告后,我对此进行了一些研究(感谢 Google)。

从这个htaccess 想法中吸取教训,我正在执行以下操作,这似乎正在工作。我为注入 HTTP_X_APPENGINE_COUNTRY ServerVariable 的 AppSpot 添加了一个特定规则。

    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
于 2011-12-02T20:18:01.017 回答
0

您可以在请求对象中查找这些标头,并据此确定请求是否通过代理

1) 通过 2) X-Forwarded-For

请注意,这不是 100% 确定的技巧,取决于这些代理服务器是否选择添加上述标头。

于 2009-03-27T14:50:55.787 回答