1 漏洞描述
X-Forwarded-For 作为 HTTP 请求的扩展头,在请求的过程中可以被直接的进行修改。正常情况下,我们所获得的 ips 第一部分应该是客户端 IP,但是如果客户端对 X-Forwarded-For 进行了修改,我们仍旧采用以上方法获得客户端 IP,那么客户端 IP 将会是被伪造过的。
2 修复建议
1、在直接对外的Nginx反向代理服务器上配置:proxy_set_header X-Forwarded-For $remote_addr;
2、如果有多层Nginx代理,内层的Nginx配置:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
3 修复过程
原配置信息:
server {
listen 8085;
server_name 127.0.0.1;
location /sys {
proxy_pass http://127.0.0.1:8085/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
修改后配置信息:
server {
listen 8085;
server_name 127.0.0.1;
location /sys {
proxy_pass http://127.0.0.1:8085/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 防止X-Forwarded-For头伪造的主要设置在这里
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
4 验证结果
- 测试方法:通过postman伪造客户端IP
- 修改前,日志获取的操作IP地址存在伪造的IP地址
- 修改后,日志获取的操作IPd地址正常