新闻资讯
看你所看,想你所想

X-Forwarded-For

X-Forwarded-For

X-Forwarded-For

X-Forwarded-ForXFF)是用来识别通过HTTP代理或负载均衡方式连线到Web伺服器的客户端最原始的IP位址的HTTP请求头栏位。 Squid 快取代理伺服器的开发人员最早引入了这一HTTP头栏位,并由IETF在HTTP头栏位标準化草案中正式提出。

当今多数快取伺服器的用户为大型ISP,为了通过快取的方式来降低他们的外部频宽,他们常常通过鼓励或强制用户使用代理伺服器来接入网际网路。有些情况下,这些代理伺服器是透明代理,用户甚至不知道自己正在使用代理上网。

如果没有XFF或者另外一种相似的技术,所有通过代理伺服器的连线只会显示代理伺服器的IP位址,而非连线发起的原始IP位址,这样的代理伺服器实际上充当了匿名服务提供者的角色,如果连线的原始IP位址不可得,恶意访问的检测与预防的难度将大大增加。XFF的有效性依赖于代理伺服器提供的连线原始IP位址的真实性,因此,XFF的有效使用应该保证代理伺服器是可信的,比如可以通过创建可信伺服器白名单的方式。

基本介绍

  • 外文名:X-Forwarded-For
  • 简称:XFF头
  • 代表:客户端
  • 作用:获得HTTP请求端真实的IP

产生背景

X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连线到Web伺服器的客户端最原始的IP位址的HTTP请求头栏位。 Squid 快取代理伺服器的开发人员最早引入了这一HTTP头栏位,并由IETF在Forwarded-For HTTP头栏位标準化草案中正式提出。
当今多数快取伺服器的使用者为大型ISP,为了通过快取的方式来降低他们的外部频宽,他们常常通过鼓励或强制用户使用代理伺服器来接入网际网路。有些情况下, 这些代理伺服器是透明代理, 用户甚至不知道自己正在使用代理上网。
如果没有XFF或者另外一种相似的技术,所有通过代理伺服器的连线只会显示代理伺服器的IP位址(而非连线发起的原始IP位址), 这样的代理伺服器实际上充当了匿名服务提供者的角色, 如果连线的原始IP位址不可得,恶意访问的检测与预防的难度将大大增加。XFF的有效性依赖于代理伺服器提供的连线原始IP位址的真实性,因此, XFF的有效使用应该保证代理伺服器是可信的, 比如可以通过建立可信伺服器白名单的方式。

格式

这一HTTP头一般格式如下:
X-Forwarded-For: client1, proxy1, proxy2, proxy3
其中的值通过一个 逗号+空格 把多个IP位址区分开, 最左边(client1)是最原始客户端的IP位址, 代理伺服器每成功收到一个请求,就把请求来源IP位址添加到右边。 在上面这个例子中,这个请求成功通过了三台代理伺服器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;通过proxy1的时候,client1被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1被添加到XFF中,之后请求被发往proxy3;通过proxy3时,proxy2被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请求会被继续转发。
鑒于伪造这一栏位非常容易,应该谨慎使用X-Forwarded-For栏位。正常情况下XFF中最后一个IP位址是最后一个代理伺服器的IP位址, 这通常是一个比较可靠的信息来源。

使用

在代理转发及反向代理中经常使用X-Forwarded-For 栏位。

代理转发

在 代理转发的场景中,你可以通过内部代理链以及记录在网关设备上的IP位址追蹤到网路中客户端的IP位址。处于安全考虑,网关设备在把请求传送到外网(网际网路)前,应该去除 X-Forwarded-For 栏位里的所有信息。这种情况下所有的信息都是在你的内部网路内生成,因此X-Forwarded-For栏位中的信息应该是可靠的。

反向代理

在反向代理的情况下,你可以追蹤到网际网路上连线到你的伺服器的客户端的IP位址, 即使你的网路伺服器和网际网路在路由上是不可达的。这种情况下你不应该信任所有X-Forwarded-For信息,其中有部分可能是伪造的。因此需要建立一个信任白名单来确保X-Forwarded-For中哪些IP位址对你是可信的。
最后一次代理伺服器的地址并没有记录在代理链中,因此只记录 X-Forwarded-For 栏位是不够的。完整起见,Web伺服器应该记录请求来源的IP位址以及X-Forwarded-For 栏位信息。

Web日誌

大多数Web伺服器可以通过配置在日誌中记录X-Forwarded-For。 Apache中可以非常简单地修改配置来实现,但MS IIS 6及以下的版本需要第三方软体支持来实现。IIS7用户可以从IIS官方网站获得免费的IIS相关组件来实现。

相关推荐

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:yongganaa@126.com