什么是X-Forwarded-For
如果要问当下最走红的应用层协议,当HTTP莫属,一个无状态维护协议,其连接基于TCP,在HTTP协议头部没有IP地址字段。所以,如果要在应用层保存IP地址信息(应用服务器统计访问者信息的主要来源之一),只能通过X-Forwarded-For头部字段来实现。
X-Forwarded-For位于HTTP协议的请求头部,属于HTTP的头部扩展。在HTTP/1.1(RFC 2616)协议规范中并没有对X-Forwarded-For有明确的定义。最开始由著名的代理软件Squid(见https://blog.51cto.com/14267414/www.squid-cache.org)引入,用来传递HTTP请求端的真实IP地址。如今,X-Forwarded-For已成为事实上的标准,各大HTTP代理、负载均衡等转发服务都在广泛使用它,并在RFC 7239(Forwarded HTTP Extension)标准中收录。
下图是X-Forwarded-For格式,越靠近左边的地址距离服务器越远,每经过一层代理就在后面加上该代理地址。X-Forwarded-For信息除了在真实代理环境中被正常使用外,其信息也可以通过伪造形成。
如何获取真实的客户端IP地址
X-Forwarded-For地址可以伪造,那该如何获取客户端真实IP地址呢?
开发层面,在开发语言中能够获取Remote Address,该地址就是真实的客户端IP地址,用来与应用服务器建立TCP连接,该地址无法伪造,如果伪造则连接无法成功建立,继而不会后面的HTTP访问存在。
运维层面,全流量分析系统实时采集和分析TCP五元组,对所有访问服务器的客户端地址统计和记录,并按需显示访问行为特征。
真实的客户端IP地址就是我们常说的TCP三步握手中发起连接请求的IP地址。
X-Forwarded-For伪造访问有什么危害
前面已说过,X-Forwarded-For中IP可以伪造。那么,这种伪造会带来什么危害呢,下面列举几种: