好吧,我有一个小的身份验证问题。我的web服务允许使用用户名和密码通过HTTP连接到我的API,但此连接也可以限制为特定的IP地址。
这意味着$_SERVER['REMOTE_ADDR']可能是不正确的。我已经知道,任何IP信息都不能真正依赖-我的限制只是为了增加另一层安全。
如果这是对我的web服务器的请求的一般概述:
clientSERVER => clientPROXY => myPROXY => mySERVER
这意味着mySERVER会显示myPROXY的REMOTE_ADDR,而不是客户端的and,并将客户端的实际IP作为HTTP_X_FORWARDED_FOR发送。
为了克服这个问题,我的web服务有一个“可信代理”IP地址列表,如果REMOTE_ADDR来自这些可信IP地址之一,它就会告诉我的web服务实际的IP地址是HTTP_X_FORWARDED_FOR的值。
现在问题出在clientPROXY上了。这意味着(通常) mySERVER会获得具有多个IP地址的HTTP_X_FORWARDED_FOR值。根据HTTP_X_FORWARDED_FOR文档,该值是以逗号分隔的IP地址列表,其中第一个IP是实际真实客户端的IP,其他每个IP地址都是代理的IP地址。
那么,如果HTTP_X_FORWARDED_FOR有多个值,并且我的服务是IP受限的,我是否必须根据我允许的IP列表检查HTTP_X_FORWARDED_FOR的“最后”值,而忽略实际的客户端IP?
我假设在一个系统中,我必须设置允许的IP地址列表,白名单上的IP地址应该是代理的地址,而不是代理后面的IP (因为它可能是某个本地主机IP,并且经常更改)。
HTTP_CLIENT_IP又是什么呢?
发布于 2014-06-18 07:45:43
我喜欢Hrishikesh的回答,对于这个问题,我只对add...because有这样的回答,当使用多个代理时,我们看到一个逗号分隔的字符串,我们发现有必要添加一个分解并获取最终的值,如下所示:
$IParray=array_values(array_filter(explode(',',$_SERVER['HTTP_X_FORWARDED_FOR'])));
return reset($IParray);array_filter是用来删除空条目的。
https://stackoverflow.com/questions/11452938
复制相似问题