反向代理服务器-HTTP请求头中的XFF

在做最基础的有关于XFF头的ctf-web题时对xff原理的简单记录

XFF原理性认知

一、反向代理说明

反向代理即:通过代理服务器接收来自外部网络的请求,然后代理服务器再转发给内网服务器,再将内部服务器得到的结果通过代理服务器返回给外部网络的客户端。

二、反向代理功能

利用反向代理可以提供WAF功能,阻止web攻击;而在大型网站中通常将反向代理作为公网访问地址,位于防火墙外部,Web服务器是内网。如果内网服务器返回错误消息,代理服务器会先行截取该消息并更改标头中列出的任何 URL,然后再将消息发送给客户机。如此可防止外部客户机获取内部内容服务器的重定向 URL。

三、HTTP请求中源IP

从HTTP请求中获得请求者的IP地址有两种方式:Remote Address和X-Forward-For。但是两者的安全性不通:

Remote Address为HTTP请求的源地址,HTTP协议三次握手与发送响应报文时都使用的此地址,因此一旦请求者伪造Remote Address地址,他将无法收到HTTP响应报文,此时伪造没有任何意义。这也就使得Remote Address默认具有防篡改的功能。

而在一些大型网站中,外部网络的用户的HTTP请求会经过反向代理服务器转发给内网服务器,内网服务器这时候收到的Remote Address地址并不是外部网络用户地址,而是反向代理服务器的IP。因此,对于内网服务器来说,无法查看用户IP,所以这时,HTTP扩展头部X-Forward-For(XFF)起到了作用。当反向代理服务器转发外部网络用户的HTTP请求时,需要将用户的真实IP地址写入到X-Forward-For中,以便后端服务能够使用。由于X-Forward-For是可修改的,所以X-Forward-For中的地址在某种程度上不可信。

因此,在进行与安全有关的操作时,只能通过Remote Address获取用户的IP地址,不能相信任何请求头。

CC代理属于正向代理:

305504-20161112120952686-765920985.png