核心价值使用浏览器自动附带的 Fetch Metadata 头识别请求上下文,从源头阻断跨站攻击面。对 `site`、`mode`、`dest` 进行白名单治理,提升入口的可预期性与安全性。Middleware 实现import { NextResponse, NextRequest } from 'next/server' const ALLOW_SITE = new Set(['same-origin', 'same-site']) const ALLOW_MODE = new Set(['navigate', 'cors', 'same-origin']) const ALLOW_DEST = new Set(['document', 'empty', 'image', 'style', 'script']) export function middleware(req: NextRequest) { const site = req.headers.get('sec-fetch-site') || '' const mode = req.headers.get('sec-fetch-mode') || '' const dest = req.headers.get('sec-fetch-dest') || '' if (!ALLOW_SITE.has(site)) { return new NextResponse('Forbidden', { status: 403 }) } if (mode && !ALLOW_MODE.has(mode)) { return new NextResponse('Forbidden', { status: 403 }) } if (dest && !ALLOW_DEST.has(dest)) { return new NextResponse('Forbidden', { status: 403 }) } return NextResponse.next() } export const config = { matcher: ['/((?!_next|api/public).*)'] } 治理建议对 API 子路径可放宽 `mode` 白名单,但保留 `site` 限制;对敏感路由可仅接受 `same-origin`。与 CSRF、防 XSS 的 CSP/Trusted Types 合作,形成全链路防护。结论Fetch Metadata 是现代浏览器提供的低成本入口防护机制。在 Middleware 层进行白名单治理,可有效降低跨站滥用与异常上下文的风险。

发表评论 取消回复