URL规范化与安全路由全栈治理最佳实践概述不一致的URL与路由处理可引发安全绕过。通过统一规范化与白名单策略,在前后端形成一致的路由治理。规范化函数function canonicalUrl(u: string, allowParams: string[]): string | null {
try {
const url = new URL(u)
const keys = allowParams.slice().sort()
const parts: string[] = []
for (const k of keys) {
const v = url.searchParams.get(k)
if (v !== null) parts.push(`${k}=${encodeURIComponent(v)}`)
}
return `${url.origin}${url.pathname}${parts.length ? '?' + parts.join('&') : ''}`
} catch { return null }
}
路由白名单const routeWhitelist = new Set(['/','/home','/account','/orders'])
function routeAllowed(path: string): boolean { return routeWhitelist.has(path) }
参数与路径校验function validPath(path: string): boolean { return /^\/[a-zA-Z0-9_\-/]*$/.test(path) && !/\.\./.test(path) }
function validParam(key: string, value: string): boolean { return /^[a-zA-Z0-9_\-]+$/.test(key) && value.length <= 256 }
服务端拦截示例function guardRoute(req: any, res: any, next: Function) {
const p = req.path
if (!validPath(p) || !routeAllowed(p)) return res.status(404).end('not_found')
for (const [k, v] of Object.entries(req.query)) {
if (!validParam(k, String(v))) return res.status(400).end('invalid_param')
}
next()
}
运维要点>- 在前后端统一使用规范化与白名单校验>- 拒绝非规范路径与未知参数,记录审计事件>- 根据业务演进维护路由与参数清单,避免过宽放行通过规范化与白名单的组合,可在全栈层面建立稳健的路由安全治理基线。

发表评论 取消回复