X-Forwarded-For:是一个在HTTP请求头中常用的字段,主要用于展示HTTP请求的来源IP地址。当请求通过代理或负载均衡器时,该字段能够记录请求经过的所有IP地址,从而帮助服务器识别原始请求的来源。由于其可记录多个IP地址,可能存在被伪造的风险。X-Real-IP:也是一个关于IP的HTTP头部信息,与X-Forwarded-For
我们知道 HTTP 连接基于 TCP 连接,HTTP 协议中没有 IP 的概念,Remote Address 来自 TCP 连接,表示与服务端建立 TCP 连接的设备 IP,在这个例子里就是 IP3。 Remote Address 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求。不同语言获取 Remote Address...
X-Forwarded-For一般是每一个非透明代理转发请求时会将上游服务器的IP地址追加到X-Forwarded-For的后面,使用英文逗号分割 X-Real-IP一般是最后一级代理将上游IP地址添加到该头中 X-Forwarded-For是多个IP地址,而X-Real-IP是一个 但它们都可以伪造 ...
proxy1追加就客户端IP,proxy2追加记录proxy1. 如果请求的时候伪造X-Forwarded-For即加header头 -H ‘X-Forwarded-For:1.1.1.1,2.2.2.2’。就会是 伪造IP,客户端IP,proxy1,proxy2,proxyN 所以说取真实IP直接获取X-Forwarded-For的第一个IP是不合理的。 如果是服务器上,不传递X-Forwarded-For,即proxy_set_he...
4.注意,应用服务器可以通过$proxy_add_x_forwarded_for客户端IP(只要至少proxy01代理设置了proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;我们取第一IP就好了),但是我们要考虑客户端伪造头部的情况,如下示例: 假设我们在所有代理都加上了proxy_set_header X-Forwarded-For $proxy_add_x_forwarde...
Remote Address 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求。不同语言获取 Remote Address 的方式不一样,例如 php 是$_SERVER["REMOTE_ADDR"],Node.js 是req.connection.remoteAddress,但原理都一样。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://1xx.xxx.xxx.xxx;} 红⾊部分就是为了记录代理过程做的配置,在http header中添加代理的信息,我们可以把X-Forwarded-For当成http扩展头,其格式⼀般为:X-Forwarded-For:192.168.247.1, 192.168.247.131, 192.168.247....
在整个反向代理链条的第一个反向代理可以不配置“proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for”,否则客户端可以伪造X-Forwarded-For从而伪造客户端真实IP,如果服务端使用X-Forwarded-For第一个IP作为真实客户端IP,则就出问题了。如果通过配置X-Real-IP请求头或者配合realip模块也不会出现该问题。
在整个反向代理链条的第一个反向代理可以不配置“proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for”,否则客户端可以伪造X-Forwarded-For从而伪造客户端真实IP,如果服务端使用X-Forwarded-For第一个IP作为真实客户端IP,则就出问题了。如果通过配置X-Real-IP请求头或者配合realip模块也不会出现该问题。
real_ip模块是Nginx的一个标准模块,可以用于处理X-Forwarded-For头。它提供了一些指令,可以将X-Forwarded-For头中的IP地址替换为真实的客户端IP地址。使用real_ip模块可以确保我们获取到的IP地址是准确的,而不是被代理服务器篡改或伪造的。 使用real_ip模块的步骤 ...