核心价值从 `X-Forwarded-For` 安全提取客户端 IP 并进行入口级速率限制,降低滥用与攻击风险。使用标准响应头表达限流窗口与重试时间,提高客户端协作性。实现import { NextResponse, NextRequest } from 'next/server' const buckets = new Map<string, { count: number; reset: number }>() const WINDOW = 10_000 const LIMIT = 30 function getIP(req: NextRequest) { const xff = req.headers.get('x-forwarded-for') || '' const ip = xff.split(',')[0].trim() return ip || req.ip || 'unknown' } export function middleware(req: NextRequest) { const ip = getIP(req) const now = Date.now() const b = buckets.get(ip) || { count: 0, reset: now + WINDOW } if (now > b.reset) { b.count = 0; b.reset = now + WINDOW } b.count += 1 buckets.set(ip, b) if (b.count > LIMIT) { const retry = Math.ceil((b.reset - now) / 1000) return new NextResponse('Too Many Requests', { status: 429, headers: { 'Retry-After': String(retry) }, }) } return NextResponse.next() } export const config = { matcher: ['/((?!_next|api/public).*)'] } 治理建议生产环境建议使用持久化存储或网关级限流;示例为轻量入口治理,适合低流量保护。对静态资源与公开 API 排除限流(如通过 `matcher` 白名单),避免影响正常访问。结论入口限流是前端安全的基础防线之一。结合 IP 提取与标准限流响应头,可提升可预期性并降低滥用风险。

发表评论 取消回复