关于X-Forwarded-For被伪造情况下获取真实ip的处理

一颗小胡椒2022-01-10 21:11:12

背景

在风控场景下,有很多基于客户端ip的风控规则。通常通过http协议头中的X-Forwarded-For来获取ip,但该字段很容易被伪造,这种情况下该如何处理?

概念

X-Forwarded-For X-Forwarded-For 是一个扩展头。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP,现在已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239(Forwarded HTTP Extension)标准之中.

$remote_addr

是nginx与客户端进行TCP连接过程中,获得的客户端真实地址. Remote Address 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求

$X-Real-IP

是一个自定义头。X-Real-Ip 通常被 HTTP 代理用来表示与它产生 TCP 连接的设备 IP,这个设备可能是其他代理,也可能是真正的请求端。需要注意的是,X-Real-Ip 目前并不属于任何标准,代理和 Web 应用之间可以约定用任何自定义头来传递这个信息

分析

网络请求通常是浏览器(或其他客户端)发出请求,通过层层网络设备的转发,最终到达服务端。那么每一个环节收到请求中的remote_addr必定是上游环节的真实IP,这个无法伪造。那从全链路来看,如果需要最终请求的来源,则通过X-Forwarded-For来进行追踪,每一环节的ip(remote_addr)都添加到X-Forwarded-For字段之后,这样X-Forwarded-For就能串联全链路了。

X-Forwarded-For: client_ip, proxy1_ip, proxy2_ip

以Nginx为例,添加X-Forwarded-For的配置方式为:

 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

如果用户在请求时候伪造的话,那么会出现上面案例的client1前面,出现伪造的ip:

X-Forwarded-For: 伪造ip1, 伪造ip2, client_ip, proxy1_ip, proxy2_ip

这样的话,需要取真实的client_ip,则需要取proxy1_ip前一个ip值;

如果想要过滤掉或覆盖伪造的ip的话,则需要第一层代理(proxy1)用remote_addr来覆盖X-Forwarded-For:

proxy_set_header X-Forwarded-For $remote_addr;

验证

准备Mock服务

from flask import Flaskfrom flask import request
app = Flask(__name__)
@app.route('/HelloWorld')def hello_world():    print request.headers    return "Hello World!"
if __name__ == "__main__":    app.run

准备Nginx代理

#user  nobody;worker_processes  1;
events {    worker_connections  1024;}
http {    include       mime.types;    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;    #tcp_nopush     on;
    #keepalive_timeout  0;    keepalive_timeout  65;
    #gzip  on;
    proxy_set_header Host $host;     proxy_set_header Cookie $http_cookie;     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    server {        listen       80;        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {            root   html;            index  index.html index.htm;            proxy_pass http://localhost:5000/;        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html        #        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    }

PostMan伪造x-forwarded-for发起请求

Nginx打印日志,可以看到前面打印的是$remote_addr真实IP,后面打印的是X-Forwarded-For伪造IP

Mock服务日志,可以看到真实地址已经被Nginx拼到X-Forwarded-For后面了

版权申明:内容来源网络,版权归原创者所有。除非无法确认,都会标明作者及出处,如有侵权,烦请告知,我们会立即删除并致歉!

软件
本作品采用《CC 协议》,转载必须注明作者和本文链接
根据SecurityScorecard发布的《全球第三方网络安全漏洞报告》显示,2023年大约29%的违规行为可归因于第三方攻击媒介,因为许多违规行为的报告没有指定攻击媒介,所以实际比例可能要更高。MOVEit、CitrixBleed和Proself是2023年的软件供应链方面三个最广泛利用的漏洞,其中MOVEit零日漏洞产生广泛影响可能被归咎于第三方、第四方甚至第五方。
近日,以色列网络安全公司Seal Security宣布获得由Vertex Ventures Israel领投的740万美元种子轮融资,Seal归属软件供应链安全赛道,其研发的平台产品主要利用生成式AI为客户提供自动化的修复解决方案,其平均修复时间可从过去几个月缩短到现在的几个小时,足以以应对软件供应链这一日益严峻的挑战。
通过在开源软件包中插入恶意代码来迅速将恶意软件传播到整个软件供应链中是恶意分子常用的攻击手段。然而,最新的研究发现,如果用户等待大约14天后再将这些软件包更新到最新版本,就可以避免受到软件包劫持攻击的不良影响。
软件组成分析(SCA)应用程序安全测试(AST)工具市场的一个细分市场,负责管理开源组件的使用。SCA工具自动扫描应用程序的代码库,包括容器和注册表等相关构件,以识别所有开源组件、它们的许可证遵从性数据和任何安全漏洞。除了提供对开源使用的可见性之外,一些SCA工具还通过区分优先级和自动补救来帮助修复开源漏洞。SCA工具通常从扫描开始,生成产品中所有开源组件的清单报告,包括所有直接和传递依赖项。拥有
软件安全之CRC检测
2023-04-19 09:47:57
k++)//因为这里异或是从数据的高位开始,所以需要计算的数据左移8位,这里就需要计算8次。1)//判断最高位是否为1. 0xEDB88320;//最高位为1,右移一位,然后与0xEDB88320异或???相当于例子2中110与000异或值是不变的
基于各方在自身领域的专业积累,将此次调研工作进行了明确的分工,并将不定期进行调研分享交流会。
各类攻防演练的结果证明,软件供应链攻击已成为投入低、见效快、易突破的有效方式。总体思路与原则:合规是底线,管理是准则,制度是要求,技术是支撑,服务是保障,流程是协作。安全管理制度的建立,能够规范软件供应链涉及的内部、外部角色的行为,同时提供制度性保障。其次,针对软件开发各阶段与存在的风险,引入对应的安全能力,提供技术支撑,确保安全质量。
新推出的开放框架寻求为公司和安全团队提供全面且可行的方式深入了解软件供应链攻击行为及技术。这项名为开放软件供应链攻击参考(OSC&R)的计划由以色列软件物料安全管理公司OX Security主导,评估软件供应链安全威胁,覆盖一系列攻击途径,比如第三方库和组件漏洞、构建及开发系统供应链攻击,以及被黑或恶意软件更新包。
当下,软件开发安全的理念很火,各行各业都已认识到保障应用系统开发安全的重要性,但是要真正实现起来,结果却不是那么理想。
软件常见漏洞的解析
2022-11-28 10:16:06
理论基础漏洞可以定义为“在软件和硬件组件中发现的计算逻辑(例如代码)中的弱点,当被利用时,会对机密性,完整性
一颗小胡椒
暂无描述