理解RFC2616:正向代理请求头处理的最低要求咨询
正向代理请求头处理最低要求及必删请求头梳理
通用最低处理要求
- 必须严格区分逐跳请求头和端到端请求头:逐跳头仅在客户端到代理的单次TCP连接内生效,禁止转发到上游;端到端头除非存在安全风险,默认原样转发,不得随意修改。
- 必须校验
Host头合法性,禁止转发格式不符合域名/IP规范的请求,避免触发上游服务的解析漏洞。 - 若代理本身会修改响应内容(如内容过滤、压缩转码),必须同步调整
Accept-Encoding等内容协商类请求头,避免上游返回代理无法解析的编码格式。 - 必须清理仅在客户端本地网络生效的敏感头,防止内网信息泄露。
必须删除的请求头列表
1. RFC2616规范强制要求不允许转发的逐跳头
Connection:用于标记当前连接的控制选项,还会指定本次连接关联的其他逐跳头,处理完成后必须删除。Keep-Alive:控制当前TCP连接的保活参数,仅对客户端与代理的连接生效。Proxy-Authenticate:仅用于代理向客户端返回认证要求的响应场景,请求方向的该字段无任何意义,必须删除。Proxy-Authorization:客户端发给当前代理的认证凭证,禁止转发到上游,否则会直接泄露代理的认证信息。TE:用于指定当前连接支持的传输编码扩展选项,仅单次连接有效。Trailers:用于标记分块传输的尾部头部字段,仅对当前传输连接生效。Transfer-Encoding:控制当前连接的传输编码规则,代理需要根据自身与上游的连接协商结果重新设置,不得直接转发客户端的取值。Upgrade:用于连接协议升级(如切换为WebSocket),如果代理不支持对应升级协议必须删除;即使支持也需要重新协商,不得直接转发客户端的取值。
2. 安全合规要求必须删除的请求头
- 所有以
Proxy-为前缀的自定义头:这类头都是客户端与当前代理之间的私有通信字段,转发到上游会泄露代理的私有配置逻辑。 - 客户端伪造的来源标识头:包括客户端自带的
X-Forwarded-For、X-Real-IP等,若代理不需要向上游透传客户端真实IP则直接删除;需要透传的也要覆盖为代理获取的真实客户端地址,不得直接使用客户端提交的取值。 - 指向私网/环回地址的
Host头:比如取值为localhost、127.0.0.1、192.168.0.0/16段、10.0.0.0/8段的Host头,防止代理被利用发起内网资源探测。
注:若有特殊业务需求需要向上游传递自定义标识,仅可新增专属业务头,不得修改常规端到端头的默认转发逻辑,避免破坏上层业务的兼容性。
内容的提问来源于stack exchange,提问作者AdjunctProfessorFalcon
相关产品推荐
相关产品推荐

