通过HTTPS获取客户端IP

时间:2018-01-02 15:07:43

标签: c#

背景

我们在IIS服务器上使用站点范围的HTTPS。我们正在评估MaxMind的geoIP查询服务,以帮助确定注册客户是否在美国,这是我们将提供区域服务的地方。

问题C#代码

过去,我使用类似以下的代码来检测HTTP上的客户端IP地址。我知道通过代理服务器可以很容易地通过HTTP欺骗IP地址。

更新

我想指出一个关于HTTPS / IP Spoofing的错误观念。此Link显示如何保留客户端IP地址,提到这仅对受信任的代理有效,我实际上无法从我的服务器控制。

这是我明显错过的一点。如果通过代理路由客户端请求,则看起来客户端甚至可以通过SSL隐藏其IP地址。

用户Evk提供了example,其中Firefox可用于欺骗浏览器中的经度/纬度检查。我在HTML5演示网站和运行SSL的SPA上查看了这个。在这两种情况下,Firefox在纽约都有一个虚假的位置。

返回原始问题

Poke帮助纠正了我对第一部关于反向代理的C#代码的一些误解。

非常感谢您的投入。真的很感激。

    var clientpAddr = string.Empty;
    // Is this first condition really necessary with HTTPS?
    if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) {
        // Field format is: client1, proxy1, proxy2, ...
        clientpAddr = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(',').FirstOrDefault();
    } else if (!string.IsNullOrEmpty(HttpContext.Current.Request.UserHostAddress)) {
        clientpAddr = HttpContext.Current.Request.UserHostAddress;
    }
    if (!string.IsNullOrEmpty(clientpAddr))
        LogFileWriter.WriteLine(clientpAddr);

在我们使用HTTPS的所有移动和桌面设备测试中,我们只观察到上述代码中返回的一个IP地址。

  1. 使用HTTPS时,代码的第一部分是否不必要?

  2. 是否有更全面的证据/优质方式来处理HTTPS方案?

  3. 我已经在HTTP上找到了很多信息,但在HTTPS上几乎没有。

    ...谢谢

0 个答案:

没有答案