背景与价值target=_blank可被利用进行反向标签劫持。设置rel=noopener/noreferrer可阻断opener访问与Referer泄露。统一规范必须:`rel="noopener noreferrer"`。白名单:仅允许受控域外跳,其他拒绝或移除target。审计:记录外链点击与来源。核心实现封装链接创建type LinkOpt = { href: string; text: string }
const allowOrigins = new Set(['https://www.example.com','https://docs.example.com'])
function originAllowed(href: string): boolean { try { const u = new URL(href); return allowOrigins.has(u.origin) } catch { return false } }
function makeExternalLink(opt: LinkOpt): HTMLAnchorElement | null {
if (!originAllowed(opt.href)) return null
const a = document.createElement('a')
a.href = opt.href
a.textContent = opt.text
a.target = '_blank'
a.rel = 'noopener noreferrer'
return a
}
落地建议统一封装外链创建并强制rel属性与白名单校验,阻断潜在劫持与泄露。验证清单是否为_blank外链设置rel=noopener/noreferrer;外链域是否命中白名单。

发表评论 取消回复