背景
我们在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地址。
使用HTTPS时,代码的第一部分是否不必要?
是否有更全面的证据/优质方式来处理HTTPS方案?
我已经在HTTP上找到了很多信息,但在HTTPS上几乎没有。
...谢谢