背景与价值DNS重绑定通过变更解析结果绕过同源策略。统一Host与Origin治理并校验解析一致性可有效阻断。统一规范Host白名单:仅允许受控Host与Origin。解析一致性:解析结果不得落入私网或环回网段。代理头治理:统一校验并优先可信代理头。核心实现白名单与解析const allowHosts = new Set(['app.example.com','api.example.com']) function hostAllowed(h: string): boolean { return allowHosts.has(h.toLowerCase()) } function ipv4ToInt(ip: string): number { const m = ip.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/); if (!m) return -1; const n = m.slice(1).map(Number); for (const x of n) if (x<0||x>255) return -1; return ((n[0]<<24)>>>0)+(n[1]<<16)+(n[2]<<8)+n[3] } function inCidr(ip: string, cidr: string): boolean { const [b,p] = cidr.split('/'); const base = ipv4ToInt(b); const mask = (~0 << (32-Number(p)))>>>0; const v = ipv4ToInt(ip); if (base<0||v<0) return false; return (v & mask) === (base & mask) } const blockedCidrs = ['10.0.0.0/8','172.16.0.0/12','192.168.0.0/16','127.0.0.0/8','169.254.0.0/16'] 一致性校验type Req = { headers: Record<string, string | undefined> } function getHost(req: Req): string { const xf = req.headers['x-forwarded-host']; const h = req.headers['host']; return String((xf || h || '')).split(',')[0].trim() } async function resolve(host: string): Promise<string[]> { return [] } async function validTarget(req: Req): Promise<boolean> { const host = getHost(req) if (!hostAllowed(host)) return false const ips = await resolve(host) for (const ip of ips) for (const c of blockedCidrs) if (inCidr(ip, c)) return false return true } 落地建议请求入口统一校验 `Host/X-Forwarded-Host` 与来源域白名单。对解析结果执行私网与环回阻断,必要时固定解析或使用DoH。代理链路明确可信头优先级,防止伪造导致绕过。验证清单Host是否命中白名单;解析结果是否不在私网或环回。代理头治理是否明确且一致。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部