X-Forwarded-For

版权声明:欢迎转载,注明作者和出处就好!如果不喜欢或文章存在明显的谬误,请留言说明原因再踩哦,谢谢,不断进步! https://blog.csdn.net/qq_34417408/article/details/83017954

    最近在项目对外联调过程中,发现了关于XFF的问题,这里简单介绍下,大部分是贴维基百科中的词条:https://zh.wikipedia.org/wiki/X-Forwarded-For
    项目场景:由于工程在自家服务器中,但业务需求调用另一家的服务接口,因为服务器只对内网开放,故实现事通过代理进行访问外部接口,但header中的X-Forwarded-For暴露了正是的内网IP,而内网IP并不在另家服务中的白名单(另家的白名单中配置的是我们的外网IP),故联调时出现未支持访问请求异常。

    解决方式:实现调用时把自家对外的外网IP(配置在另家白名单中的IP)写在header中的x-forwarded-for中;如:

 $header[] = "x-forwarded-for:" . 'IP';
 $header[] = "HTTP_X_FORWARDED_FOR:" . 'IP';
 $header[] = "REMOTE_ADDR:" . 'IP';

    这种方案其实是:这就是xff欺骗的方式,ORP官方不支持,如果大家有好的方式可以留言,相互交流。
     另外补充:对外IP最好是一组或多组网段,这样减少网络拥堵,减少异常事故的风险。

    x-forwarded-for:是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。

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

    X-Forwarded-For格式:X-Forwarded-For: client1, proxy1, proxy2 ;其中的值通过一个 逗号+空格 把多个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地址, 这通常是一个比较可靠的信息来源。

猜你喜欢

转载自blog.csdn.net/qq_34417408/article/details/83017954