X-Forwarded-For
X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP头字段,或者说可以标记【整个代理链路】
这一HTTP头一般格式如下:
X-Forwarded-For: originalClient, proxy1, proxy2
XFF 的内容由「英文逗号」隔开的多个部分组成,最开始的是离服务端最远的设备 IP,然后是每一级代理设备的 IP
如果一个 HTTP 请求到达服务器之前,经过了三个代理 Proxy1、Proxy2、Proxy3,IP 分别为 IP1、IP2、IP3,用户真实 IP 为 IP0,那么按照 XFF 标准,服务端最终会收到以下信息:
X-Forwarded-For: IP0,IP1,IP2
Proxy3 直连服务器,它会给 XFF 追加 IP2,表示它是在帮 Proxy2 转发请求。X-Forwarded-For的值列表中并没有 IP3,因为Proxy3 直接与服务器建立连接,服务端通过 Remote Address 字段就可获得IP3 。我们知道 HTTP 连接基于 TCP 连接,HTTP 协议中没有 IP 的概念,Remote Address 来自 TCP 连接,表示与服务端建立 TCP 连接的设备 IP,在这个例子里就是 IP3。
Remote Address 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求。
顾名思义,X-Forwarded-For: value 表示,“当前设备为value做了代理”。当请求经过多层代理时,当前代理会将上一代理的地址append到X-Forwarded-For的值后
如果没有XFF或者另外一种相似的技术,所有通过代理服务器与后台服务器的连接只会显示代理服务器的IP地址,而非连接发起的原始客户端IP地址。如果连接的原始IP地址不可得,恶意访问的检测与预防的难度将大大增加。XFF的有效性依赖于代理服务器提供的连接原始IP地址的真实性,因此,XFF的有效使用应该保证代理服务器是可信的,比如可以通过创建可信服务器白名单的方式










网友评论