背景与价值URL片段常用于前端路由与状态传递,需校验与转义以防DOM-Based XSS与污染。统一规范白名单与长度:仅允许指定片段并限制长度与字符集。去污染:剔除危险字符与编码异常。受控更新:仅使用textContent或转义后写入。核心实现白名单与去污染const allowHash = new Map<string, { maxLen: number; re: RegExp }>([ ['msg', { maxLen: 64, re: /^[A-Za-z0-9_\- ]+$/ }], ['tab', { maxLen: 16, re: /^[A-Za-z0-9_\-]+$/ }] ]) function parseHash(): Record<string, string> { const h = (location.hash || '').replace(/^#/, '') const out: Record<string, string> = {} for (const part of h.split('&')) { if (!part) continue const [k, v] = part.split('=') const rule = allowHash.get(k) if (!rule) continue const val = decodeURIComponent(v || '') if (val.length > rule.maxLen) continue if (!rule.re.test(val)) continue out[k] = val } return out } 受控更新function updateDom(el: Element, s: string) { el.textContent = s } 落地建议对hash参数采用键值对约定并进行白名单校验;写入DOM使用textContent。验证清单hash是否按白名单解析与校验;DOM更新是否使用受控写入。

发表评论 取消回复