背景与价值DOM-Based XSS多源于未校验的URL参数。白名单与转义可大幅降低风险。统一规范白名单:仅允许指定参数;类型校验:对值执行长度与字符集限制;输出转义:统一HTML转义再写入DOM。核心实现白名单与校验const allowParams = new Map<string, { maxLen: number; re: RegExp }>([

['q', { maxLen: 64, re: /^[A-Za-z0-9_\- ]+$/ }],

['lang', { maxLen: 5, re: /^[a-z]{2,5}$/ }]

])

function getParam(name: string): string | null {

const u = new URL(document.location.href)

const v = u.searchParams.get(name)

if (v == null) return null

const rule = allowParams.get(name)

if (!rule) return null

if (v.length > rule.maxLen) return null

if (!rule.re.test(v)) return null

return v

}

function escapeHtml(s: string): string { return s.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/'/g,''') }

受控写入function setText(el: Element, s: string) { el.textContent = s }

function setHtml(el: Element, s: string) { el.innerHTML = escapeHtml(s) }

落地建议仅对白名单参数进行读取与校验,写入DOM前统一转义或使用 `textContent`。对搜索与语言等参数设置合理长度与字符集规则,拒绝异常值。验证清单参数是否命中白名单并通过校验;DOM写入是否经转义或文本写入。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部