背景与价值Unicode同形字符与路径异常易导致混淆与绕过。统一标准化与白名单可提升安全与可控。统一规范标准化:对文件名与路径执行 `NFKC` 标准化。白名单:仅允许字母数字、下划线、连字符与点,限制长度。归一化路径:统一正斜杠与拒绝父级跳转。核心实现标准化与校验function nfkc(s: string): string { try { return s.normalize('NFKC') } catch { return s } } function validName(name: string, maxLen = 128): boolean { const n = nfkc(name) if (n.length === 0 || n.length > maxLen) return false return /^[A-Za-z0-9_\-\.]+$/.test(n) } function normPath(p: string): string { const n = nfkc(p).replace(/\\/g,'/').replace(/\/+/g,'/'); return n } function safePath(p: string): boolean { const n = normPath(p); return !n.includes('..') && /^([A-Za-z0-9_\-\/\.]+)$/.test(n) } 落地建议在上传与存储前统一执行 `NFKC` 标准化与白名单校验,拒绝异常名称与路径。存储层统一正斜杠路径与拒绝父级跳转,防止穿越与混淆绕过。验证清单名称是否通过 `NFKC` 标准化与白名单;路径是否归一化且无父级跳转。

发表评论 取消回复