---
title: HTTP请求走私防护与代理治理(CL/TE一致性/严格解析)最佳实践
keywords:
- 请求走私
- Content-Length
- Transfer-Encoding
- 规范化
- 严格解析
- 代理治理
description: 通过严格的请求头一致性校验与解析策略,阻断CL/TE走私与多CL歧义并在网关层统一规范化处理,提升请求安全。
categories:
- 文章资讯
- 技术教程
---
背景与价值
CL/TE走私利用不同代理与后端的解析差异触发边界绕过。统一一致性与规范化策略可在入口处阻断风险。
统一规范
- 头一致性:
Transfer-Encoding: chunked与Content-Length不能共存;拒绝多Content-Length或异常格式。 - 规范化解析:统一小写头键、去重并保留首个合法值。
- 禁止模糊:拒绝混淆写法(如
Transfer-Encoding: chunked, gzip)。
核心实现
一致性与规范化校验
type Headers = Record<string, string | undefined>
function normalize(headers: Headers): Record<string, string> {
const out: Record<string, string> = {}
for (const [k, v] of Object.entries(headers)) {
if (v == null) continue
const key = k.toLowerCase()
if (!(key in out)) out[key] = String(v).trim()
}
return out
}
function hasChunked(te: string): boolean { return te.split(',').map(s => s.trim().toLowerCase()).includes('chunked') }
function validContentLength(cl: string): boolean { return /^\d+$/.test(cl) }
function securityCheck(headers: Headers): boolean {
const h = normalize(headers)
const te = h['transfer-encoding']
const cl = h['content-length']
if (te && cl) return false
if (te) {
if (!hasChunked(te)) return false
if (te.includes(',')) return false
}
if (cl) {
if (!validContentLength(cl)) return false
}
return true
}
落地建议
- 在代理与网关层统一执行规范化与一致性校验,拒绝不合规请求。
- 对含有多
Content-Length或混合Transfer-Encoding的请求直接阻断并记录审计。 - 保持后端解析策略与代理一致,避免差异导致绕过。
验证清单
- 是否拒绝同时包含
Content-Length与Transfer-Encoding: chunked的请求。 - 是否拒绝多
Content-Length、异常格式或混合编码的请求。

发表评论 取消回复