首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确使用HTTP_X_FORWARDED_FOR?

如何正确使用HTTP_X_FORWARDED_FOR?
EN

Stack Overflow用户
提问于 2012-07-12 21:31:35
回答 7查看 127K关注 0票数 42

好吧,我有一个小的身份验证问题。我的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又是什么呢?

EN

Stack Overflow用户

发布于 2014-06-18 07:45:43

我喜欢Hrishikesh的回答,对于这个问题,我只对add...because有这样的回答,当使用多个代理时,我们看到一个逗号分隔的字符串,我们发现有必要添加一个分解并获取最终的值,如下所示:

代码语言:javascript
运行
复制
$IParray=array_values(array_filter(explode(',',$_SERVER['HTTP_X_FORWARDED_FOR'])));
return reset($IParray);

array_filter是用来删除空条目的。

票数 24
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11452938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档