代码之家  ›  专栏  ›  技术社区  ›  Josh Stodola

如何判断请求是否来自代理?

  •  6
  • Josh Stodola  · 技术社区  · 16 年前

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

    4 回复  |  直到 12 年前
        1
  •  11
  •   Darin Dimitrov    16 年前

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

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

    你也可以找 代理 pxy 在客户端域名中。

        2
  •  9
  •   Adam Davis    16 年前

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

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

    您将需要使用几种检测方法,例如cookie、代理标头检测,以及可能的IP启发式方法来检测此类情况。退房 http://www.osix.net/modules/article/?id=765

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

    -亚当

        3
  •  3
  •   Nico Westerdale    13 年前

    在我的域名被托管在谷歌的AppSpot.com上之后,我做了一点挖掘,在里面注入了很好的核心色情广告(感谢谷歌)。

    从中吸取教训 htaccess idea 我正在做下面的工作,看起来很有效。我为AppSpot添加了一个特定的规则,该规则注入了一个HTTP_X_APPENGINE_COUNTRY server变量。

        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
    
        4
  •  0
  •   Raj    16 年前

    您可以在请求对象中查找这些头,并相应地决定请求是否通过代理

    1) 通过 2) X-For

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