好吧,我有一个小的身份验证问题.我的Web服务允许使用用户名和密码通过HTTP连接到我的API,但此连接也可以限制为特定的IP地址.
这意味着$_SERVER['REMOTE_ADDR']可能不正确.我已经知道任何IP信息都无法真正依赖 - 我只有在尝试添加另一层安全性时才有限制.
如果这是对我的Web服务器的请求的一般概述:
clientSERVER => clientPROXY => myPROXY => mySERVER
那么这意味着mySERVER显示REMOTE_ADDRmyPROXY而不是客户端的myPERVX,并将客户端的实际IP发送为HTTP_X_FORWARDED_FOR.
为了解决这个问题,我的Web服务有一个"可信代理"IP地址列表,如果REMOTE_ADDR是来自其中一个可信IP地址,那么它告诉我的Web服务实际的IP地址是值HTTP_X_FORWARDED_FOR.
现在问题出在clientPROXY上.这意味着(通常)mySERVER获取HTTP_X_FORWARDED_FOR具有多个IP地址的值.根据HTTP_X_FORWARDED_FOR文档,该值是以逗号分隔的IP地址列表,其中第一个IP是实际真实客户端的IP,而每个其他IP地址是代理的IP地址.
因此,如果HTTP_X_FORWARDED_FOR有多个值并且我的服务是IP限制的,我是否必须检查HTTP_X_FORWARDED_FOR针对我允许的IP列表的"最后"值并忽略实际的客户端IP?
我假设在一个系统中,我必须设置允许的IP地址列表,白名单IP地址应该是代理的IP地址而不是代理后面的IP(因为那可能是一些本地主机IP并经常更改) .
那是什么HTTP_CLIENT_IP?
我有以下代码:
string ip = Request.ServerVariables["REMOTE_ADDR"];
Run Code Online (Sandbox Code Playgroud)
其中,在测试环境中确实返回用户IP地址,但是当我们将网站部署到生产环境时,此变量具有托管应用程序的服务器的IP.有帮助吗?
我很好奇是否有任何图书馆已经处理过这种东西,或者我必须再次自己做.那么,问题是我想从我的服务器上的访问者HTTP头请求中获取IP地址字段,并用Java完成整个事情?你能帮忙的话,我会很高兴.提前致谢.
在过去我用过
$ip = $_SERVER["REMOTE_ADDR"];
Run Code Online (Sandbox Code Playgroud)
哪个会返回客户端的IP.我最近开始使用Heroku托管我的网站,我发现上面的代码不再返回客户端IP.
有人遇到过这个吗?如果我的网站使用Heroku托管,我将如何使用PHP获取客户端的真实IP地址?
php ×2
.net ×1
asp.net ×1
c# ×1
forwarding ×1
heroku ×1
http ×1
http-headers ×1
ip ×1
ip-address ×1
java ×1
proxy ×1