【发布时间】:2012-07-12 06:26:32
【问题描述】:
好的,我有一个小的身份验证问题。我的 Web 服务允许使用用户名和密码通过 HTTP 连接到我的 API,但此连接也可以限制为特定的 IP 地址。
这意味着$_SERVER['REMOTE_ADDR'] 可能不正确。我已经知道任何 IP 信息都不能真正被依赖——我有这个限制只是为了增加另一层安全性。
如果这是对我的网络服务器的请求的总体概述:
clientSERVER => clientPROXY => myPROXY => mySERVER
那么这意味着 mySERVER 显示 myPROXY 的 REMOTE_ADDR 而不是客户端的,并将客户端的实际 IP 发送为 HTTP_X_FORWARDED_FOR。
为了克服这个问题,我的 Web 服务有一个“受信任的代理”IP 地址列表,如果 REMOTE_ADDR 来自这些受信任的 IP 地址之一,那么它会告诉我的 Web 服务实际 IP 地址是 @ 的值987654327@.
现在问题出在 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呢?
【问题讨论】:
标签: php proxy ip forwarding